女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

迅為RK3568開發板驅動指南Linux中通用SPI設備驅動

北京迅為電子 ? 2025-01-23 11:02 ? 次閱讀

在前面的章節中我們從0開始編寫了一個mcp2515的驅動程序,而跟I2C設備類似,在Linux內核中也有著通用SPI設備驅動,在本章節將會講解通用SPI設備驅動的使用,并講解如何在應用程序中通過ioctl對SPI進行配置和使用。

硬件:迅為RK3568開發板

wKgZO2eRsRWAO_PYAAYUE3Njxow482.pngwKgZPGeRsRWAFKbOAAMSa4gY_0A030.png

193.1內核和設備樹配置

通用SPI設備驅動在迅為提供的Linux內核中默認已經勾選了,具體路徑如下所示:

> Device Drivers

> SPI support

wKgZPGeRsRSAN_IXAAL03SQ6qFk272.png

除了內核支持之外,還需要修改設備樹,由于之前已經使能了SPI0,所以這直接修改之前編寫的mcp2515設備樹節點,具體設備樹為“kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi”,修改完成的mcp2515節點如下所示:rockchip,spidev

&spi0 {

status = "okay";

pinctrl-0 = <&spi0m1_cs0 ?&spi0m1_pins>;

pinctrl-1 = <&spi0m1_cs0 ?&spi0m1_pins_hs>;

mcp2515:mcp2515@0 {

compatible = "rockchip,spidev";

reg = <0>;

spi-max-frequency = <10000000>;

status = "okay";

};

};

wKgZO2eRsROAHmMuAADtryB9TdU540.png

保存退出之后,重新編譯內核源碼,最后將編譯得到的boot.img燒寫到開發板上。

而為了方便起見,迅為已經將修改完成的設備樹以及編譯完成的內核鏡像放到了“iTOP-3568開發板\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動程序\119_mcp2515_07\01_編譯好的內核鏡像”路徑下。

開發板啟動之后,如果存在/dev/spidev0.0設備節點,證明設備樹及內核配置正確,如下圖所示:

wKgZO2eRsROAbwmZAAA1nnjEy94138.png

/dev/spidev0.0表示一個SPI總線上的具體設備。0.0是一個標識符,用于區分系統中的不同SPI控制器和設備。這個標識符由兩部分組成:

第一個數字 0:表示SPI總線的編號。一個系統中可能有多個SPI控制器,每個控制器對應一個總線編號,從0開始。

第二個數字0:表示連接在該SPI總線上的具體設備編號。一個SPI總線上可以連接多個設備,每個設備通過片選信號(Chip Select, CS)進行區分,設備編號從0開始。

在下個小節中,將會講解內核源碼中攜帶的spidev_test SPI測試程序進行講解。

193.2 spidev_test工具使用

spidev_test是一個用于測試和調試SPI設備的命令行工具,通常在Linux系統上使用,它允許用戶直接通過SPI總線與設備進行通信,可以發送數據并接收來自設備的響應。

spidev_test源碼位于Linux源碼的kernel/tools/spi目錄下,如下圖所示:

wKgZPGeRsROAdSeZAACBKDW3zwQ742.png

然后使用以下命令對該工具進行交叉編譯

make CC=/home/topeet/Linux/linux_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc LD=/home/topeet/Linux/linux_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld

wKgZO2eRsRSAfrO2AAKlorNd3OY566.png

編譯好的文件如下圖所示。

wKgZPGeRsROAGWr5AACCgwV305E173.png

然后將編譯好的可執行文件spidev_fdx和spidev_test拷貝到開發板上使用即可。接下來介紹一下工具的使用方法

1.spidev_test工具的使用:

基本介紹:spidev_test是一個用于測試和驗證Linux中SPI設備驅動程序的用戶空間工具。它使用spidev接口與SPI設備通信。這個工具主要用來檢查SPI設備是否工作正常,以及對SPI設備進行基本的讀寫操作。

主要選項和參數

-D /dev/spidevX.Y:指定要測試的SPI設備節點。

-s :設置SPI時鐘頻率(以Hz為單位),例如-s 1000000表示1 MHz。

-d :設置數據傳輸之間的延遲時間(以微秒為單位)。

-b :設置每個數據字的位數,通常是8或16。

-H:以十六進制模式顯示傳輸的數據。

(3)示例操作

讀取設備信息:

spidev_test -D /dev/spidevX.Y -s 1000000

wKgZO2eRsROAfxj0AABfc6mTyUM391.png

這會使用 1 MHz的時鐘頻率從SPI設備讀取數據,默認情況下以十六進制顯示。

寫入和讀取數據:

spidev_test -D /dev/spidevX.Y -s 1000000 -b 8 -d 1000 -H -p 'hello'

wKgZPGeRsROAKJk7AABLUUOK5SA732.png

這條命令會向 SPI設備寫入字符串'hello',并以十六進制模式顯示設備的響應數據。-b 8指定每個字的位數為8,-d 1000設置1000微秒的延遲。

連續傳輸:

spidev_test -D /dev/spidevX.Y -s 1000000 -b 8 -p 'abcdefgh'

這個示例將連續發送字節 'abcdefgh'到SPI設備。

wKgZO2eRsRSAN2MBAABXRg26e3I839.png

2.spidev_fdx工具的使用

(1)基本介紹:spidev_fdx是一個用于全雙工SPI通信測試的命令行工具,主要用于在Linux系統上與SPI設備進行雙向數據傳輸和測試。

(2)主要選項和參數

-D /dev/spidevX.Y:指定要測試的SPI設備節點。

-s :設置SPI時鐘頻率(以Hz為單位),例如-s 1000000表示1 MHz。

-w :指定要寫入到SPI設備的數據,可以是十六進制或ASCII格式的字符串。

-r :指定從SPI設備讀取的數據大小(以字節為單位)。

-b :設置每個數據字的位數,通常是8或16。

-d :設置數據傳輸之間的延遲時間(以微秒為單位)。

(3)示例操作

以下是幾個使用 spidev_fdx工具的示例操作:

發送和接收數據:

spidev_fdx -D /dev/spidevX.Y -s 1000000 -w 'hello' -r 5

這會向 SPI設備寫入字符串'hello',并從設備讀取5個字節的響應數據。

設置時鐘頻率和延遲:

spidev_fdx -D /dev/spidevX.Y -s 500000 -d 200 -w 'abcdef' -r 10

這個示例將 SPI時鐘頻率設置為500 kHz,數據寫入延遲為200微秒,并向設備寫入字符串'abcdef',然后讀取10個字節的響應數據。

193.3應用程序中如何使用SPI

在第一個小節中使能了內核中的通用SPI,而在第二小節講解了spidev_test工具的使用,在本小節將根據spidev_test工具的源碼,編寫mcp2515通用SPI驅動程序的應用程序。

在應用程序中可以通過ioctl來獲取和配置SPI的相關屬性,并實現SPI數據的發送和接收,SPI的ioctl宏定義在“/usr/include/linux/spi/spidev.h”,部分ioctl cmd如下所示:

/*讀取/寫入SPI模式(SPI_MODE_0..SPI_MODE_3)(限制為8位)*/

#define SPI_IOC_RD_MODE _IOR(SPI_IOC_MAGIC, 1, __u8) //讀取SPI模式

#define SPI_IOC_WR_MODE _IOW(SPI_IOC_MAGIC, 1, __u8) //寫入SPI模式

/*讀取/寫入SPI位順序*/

#define SPI_IOC_RD_LSB_FIRST _IOR(SPI_IOC_MAGIC, 2, __u8) //讀取SPI低位優先

#define SPI_IOC_WR_LSB_FIRST _IOW(SPI_IOC_MAGIC, 2, __u8) //寫入SPI低位優先

/*讀取/寫入SPI設備字長(1..N)*/

#define SPI_IOC_RD_BITS_PER_WORD _IOR(SPI_IOC_MAGIC, 3, __u8) //讀取SPI每字位數

#define SPI_IOC_WR_BITS_PER_WORD _IOW(SPI_IOC_MAGIC, 3, __u8) //寫入SPI每字位數

/*讀取/寫入SPI設備默認最大速度(Hz)*/

#define SPI_IOC_RD_MAX_SPEED_HZ _IOR(SPI_IOC_MAGIC, 4, __u32) //讀取SPI最大速度(Hz)

#define SPI_IOC_WR_MAX_SPEED_HZ _IOW(SPI_IOC_MAGIC, 4, __u32) //寫入SPI最大速度(Hz)

/*讀取/寫入SPI模式字段*/

#define SPI_IOC_RD_MODE32 _IOR(SPI_IOC_MAGIC, 5, __u32) //讀取SPI模式(32位)

#define SPI_IOC_WR_MODE32 _IOW(SPI_IOC_MAGIC, 5, __u32) //寫入SPI模式(32位)

可以通過上述ioctl cmd來對SPI設備進行初始化,編寫完成的初始化函數如下所示:

int fd; // SPI設備文件描述符

int mode = SPI_MODE_0; // SPI模式

int bits = 8; //每字比特數

int speed = 10000000; //最大SPI總線速度(Hz)

int spi_init(void){

int ret;

//打開SPI設備文件

fd = open("/dev/spidev0.0", O_RDWR);

if(fd < 0){

printf("打開/dev/spidev0.0錯誤\n");

return -1;

}

/*

*設置SPI模式

*/

ret = ioctl(fd, SPI_IOC_WR_MODE32, &mode);

if (ret == -1)

printf("無法設置SPI模式\n");

ret = ioctl(fd, SPI_IOC_RD_MODE32, &mode);

if (ret == -1)

printf("無法獲取SPI模式\n");

/*

*設置每字比特數

*/

ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);

if (ret == -1)

printf("無法設置每字比特數\n");

ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);

if (ret == -1)

printf("無法獲取每字比特數\n");

/*

*設置最大傳輸速度

*/

ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);

if (ret == -1)

printf("無法設置最大傳輸速度\n");

ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);

if (ret == -1)

printf("無法獲取最大傳輸速度\n");

printf("SPI模式: 0x%x\n", mode);

printf("每字比特數: %d\n", bits);

printf("最大速度: %d Hz (%d KHz)\n", speed, speed / 1000);

return 0;

}

通過該函數可以設置SPI的模式、比特數以及最大傳輸速度,然后根據spidev_test工具源碼的傳輸函數來編寫傳輸函數,具體函數內容如下所示:

/*

*執行SPI數據傳輸.

*參數:

* fd - SPI設備文件描述符

* tx -發送緩沖區

* rx -接收緩沖區

* len -數據長度

*返回0表示成功,-1表示失敗.

*/

int transfer(int fd, char *tx, char *rx, int len)

{

int ret;

struct spi_ioc_transfer tr = {

.tx_buf = (unsigned long)tx,

.rx_buf = (unsigned long)rx,

.len = len,

.delay_usecs = delay,

.speed_hz = speed,

.bits_per_word = bits,

};

ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);

if (ret < 1){

printf("無法發送SPI消息\n");

return -1;

}

return 0;

}

在前面的章節中一步步的編寫了mcp2515的復位函數、配置函數、讀函數和寫函數,而現在可以直接在應用程序通過剛剛編寫的傳輸函數向SPI設備發送一系列的SPI指令,一個編寫完成的mcp2515的應用程序代碼如下所示:

#include

#include

#include

#include

#include

#include

#include

#define RESET 0xc0 //復位命令

#define CANSTAT 0x0e // CAN狀態寄存器地址

#define READ 0x03 //讀命令

#define CANCTRL 0x0f // CAN控制寄存器地址

#define WRITE 0x02 //寫命令

int fd; // SPI設備文件描述符

int mode = SPI_MODE_0; // SPI模式

int bits = 8; //每字比特數

int speed = 10000000; //最大SPI總線速度(Hz)

int delay; //延遲時間(微秒)

/*

*初始化SPI通信.

*返回0表示成功,-1表示失敗.

*/

int spi_init(void){

int ret;

//打開SPI設備文件

fd = open("/dev/spidev0.0", O_RDWR);

if(fd < 0){

printf("打開/dev/spidev0.0錯誤\n");

return -1;

}

/*

*設置SPI模式

*/

ret = ioctl(fd, SPI_IOC_WR_MODE32, &mode);

if (ret == -1)

printf("無法設置SPI模式\n");

ret = ioctl(fd, SPI_IOC_RD_MODE32, &mode);

if (ret == -1)

printf("無法獲取SPI模式\n");

/*

*設置每字比特數

*/

ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);

if (ret == -1)

printf("無法設置每字比特數\n");

ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);

if (ret == -1)

printf("無法獲取每字比特數\n");

/*

*設置最大傳輸速度

*/

ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);

if (ret == -1)

printf("無法設置最大傳輸速度\n");

ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);

if (ret == -1)

printf("無法獲取最大傳輸速度\n");

printf("SPI模式: 0x%x\n", mode);

printf("每字比特數: %d\n", bits);

printf("最大速度: %d Hz (%d KHz)\n", speed, speed / 1000);

return 0;

}

/*

*執行SPI數據傳輸.

*參數:

* fd - SPI設備文件描述符

* tx -發送緩沖區

* rx -接收緩沖區

* len -數據長度

*返回0表示成功,-1表示失敗.

*/

int transfer(int fd, char *tx, char *rx, int len)

{

int ret;

struct spi_ioc_transfer tr = {

.tx_buf = (unsigned long)tx,

.rx_buf = (unsigned long)rx,

.len = len,

.delay_usecs = delay,

.speed_hz = speed,

.bits_per_word = bits,

};

ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);

if (ret < 1){

printf("無法發送SPI消息\n");

return -1;

}

return 0;

}

int main(int argc, char *argv[]){

char reset_cmd[1] = {RESET}; //復位命令數組

char rd_canstat[2] = {READ, CANSTAT}; //讀CAN狀態寄存器命令數組

char canstat[4] = {0}; //存儲CAN狀態的緩沖區

char wr_canctrl[] = {WRITE, CANCTRL, 0x00}; //寫CAN控制寄存器命令數組

//初始化SPI通信

spi_init();

//執行SPI數據傳輸

// 1.發送復位命令

transfer(fd, reset_cmd, NULL, sizeof(reset_cmd));

// 2.讀取CAN狀態

transfer(fd, rd_canstat, canstat, sizeof(canstat));

printf("CAN狀態為%x\n", canstat[2]);

//清空canstat緩沖區

memset(canstat, 0, sizeof(canstat));

// 3.寫入CAN控制

transfer(fd, wr_canctrl, NULL, sizeof(wr_canctrl));

// 4.再次讀取CAN狀態

transfer(fd, rd_canstat, canstat, sizeof(canstat));

printf("CAN狀態為%x\n", canstat[3]);

return 0;

}

193.4運行測試

193.4.1編譯應用程序

上一小節編寫好的app.c應用程序源碼已經放在了“iTOP-3568開發板\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動程序\119_mcp2515_07\02_app”目錄下。

首先進行應用程序的編譯,因為測試APP是要在開發板上運行的,所以需要aarch64-linux-gnu-gcc來編譯,輸入以下命令,編譯完成以后會生成一個app的可執行程序,如下圖所示:

aarch64-linux-gnu-gcc app.c -o app

wKgZPGeRsRSANg0bAABeXHmAIYw381.png

然后將編譯完成的可執行程序拷貝到開發板上.

193.4.2運行測試

首先將193.1小節編譯好的內核鏡像燒寫到開發板上,然后將可執行程序app文件拷貝到開發板上,拷貝完成如下所示:

wKgZPGeRsRSALKUIAAArIZ7hC34845.png

然后運行可執行程序app,如下圖所示。

wKgZO2eRsRSAf4wAAABwHyRZuaA939.png

在應用程序中,發送完復位指令之后,第一條打印can狀態寄存器的值為80,表示mcp2515已經處在了配置模式。第二條打印can狀態寄存器的值為00,表示mcp2515已經處于正常模式,這就說明上一小節編寫的應用程序正常運行。

至此,關于通用SPI驅動和在應用程序中使用SPI實驗就完成了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11459

    瀏覽量

    212789
  • 開發板
    +關注

    關注

    25

    文章

    5514

    瀏覽量

    102262
  • RK3568
    +關注

    關注

    5

    文章

    577

    瀏覽量

    6086
  • 迅為電子
    +關注

    關注

    0

    文章

    55

    瀏覽量

    141
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    北京RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構

    北京RK3568開發板OpenHarmony系統南向驅動開發內核HDF
    的頭像 發表于 03-11 14:13 ?982次閱讀
    北京<b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>OpenHarmony系統南向<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>內核HDF<b class='flag-5'>驅動</b>框架架構

    RK3568開發板驅動指南GPIO子系統三級節點操作函數實驗

    RK3568開發板驅動指南GPIO子系統三級節點操作函數實驗
    的頭像 發表于 05-26 15:39 ?533次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>GPIO子系統三級節點操作函數實驗

    【教程上新】基于iTOP-RK3568開發板的OpenCV開發手冊

    【教程上新】基于iTOP-RK3568開發板的OpenCV開發手冊
    的頭像 發表于 02-08 15:22 ?1480次閱讀
    【教程上新】基于<b class='flag-5'>迅</b><b class='flag-5'>為</b>iTOP-<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>的OpenCV<b class='flag-5'>開發</b>手冊

    基于RK3568開發板的嵌入式學習之Linux驅動視頻

    基于RK3568開發板的嵌入式學習之Linux驅動視頻
    的頭像 發表于 05-19 16:30 ?1262次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b>基于<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>的嵌入式學習之<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>視頻

    RK3568開發板外接模塊之HX711 稱重模塊

    RK3568開發板外接模塊之HX711 稱重模塊
    的頭像 發表于 08-30 15:24 ?2039次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>外接模塊之HX711 稱重模塊

    RK3568開發板Debian系統使用python 進行攝像頭開發

    RK3568開發板Debian系統使用python 進行攝像頭開發
    的頭像 發表于 09-14 16:58 ?2066次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>Debian系統使用python 進行攝像頭<b class='flag-5'>開發</b>

    RK3568開發板驅動開發指南-輸入子系統

    RK3568開發板驅動開發指南-輸入子系統
    的頭像 發表于 02-23 15:11 ?1483次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b><b class='flag-5'>驅動</b><b class='flag-5'>開發指南</b>-輸入子系統

    北京RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+

    北京RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+
    的頭像 發表于 09-04 15:29 ?907次閱讀
    北京<b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>嵌入式學習之<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>全新更新-CAN+

    RK3568開發板SPI驅動指南-mcp2515驅動編寫:讀寄存器函數

    RK3568開發板SPI驅動指南-mcp2515
    的頭像 發表于 01-20 14:43 ?908次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b><b class='flag-5'>SPI</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>-mcp2515<b class='flag-5'>驅動</b>編寫:讀寄存器函數

    【技術分享】RK3568開發板使用TFTP加載內核設備

    【技術分享】RK3568開發板使用TFTP加載內核設備
    的頭像 發表于 02-21 14:04 ?580次閱讀
    【技術分享】<b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>使用TFTP加載內核<b class='flag-5'>設備</b>樹

    北京iTOP-RK3568開發板OpenHarmony系統南向驅動開發實操-HDF驅動配置LED

    北京iTOP-RK3568開發板OpenHarmony系統南向驅動開發實操-HDF
    的頭像 發表于 03-14 14:41 ?495次閱讀
    北京<b class='flag-5'>迅</b><b class='flag-5'>為</b>iTOP-<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>OpenHarmony系統南向<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>實操-HDF<b class='flag-5'>驅動</b>配置LED

    【北京】iTOP-RK3568開發板鴻蒙OpenHarmony系統南向驅動開發實操-HDF驅動配置UART

    【北京】iTOP-RK3568開發板鴻蒙OpenHarmony系統南向驅動開發實操-HDF
    的頭像 發表于 03-25 11:02 ?569次閱讀
    【北京<b class='flag-5'>迅</b><b class='flag-5'>為</b>】iTOP-<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>鴻蒙OpenHarmony系統南向<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>實操-HDF<b class='flag-5'>驅動</b>配置UART

    RK3568驅動指南GPIO子系統 GPIO操作函數實驗

    電子RK3568開發板驅動指南GPIO子系統 GPIO操作函數實驗
    的頭像 發表于 05-28 15:24 ?207次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>GPIO子系統 GPIO操作函數實驗

    RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入

    RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入
    的頭像 發表于 05-29 14:05 ?273次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>GPIO子系統GPIO子系統API函數的引入

    技術分享 | RK3568開發板如何將 Linux 板卡虛擬成U盤

    技術分享 | RK3568開發板如何將 Linux 板卡虛擬成U盤
    的頭像 發表于 06-04 10:57 ?129次閱讀
    技術分享 | <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>如何將 <b class='flag-5'>Linux</b> 板卡虛擬成U盤