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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux USB開發(fā)指南

嵌入式Linux那些事 ? 來(lái)源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 10:29 ? 次閱讀

Linux USB 開發(fā)指南

1 前言

1.1 文檔簡(jiǎn)介

介紹 USB 模塊配置和調(diào)試方法。

1.2 目標(biāo)讀者

USB 模塊開發(fā)、維護(hù)人員。

1.3 適用范圍

表 1-1: 適用產(chǎn)品列表

內(nèi)核版本 驅(qū)動(dòng)文件
Linux-4.9 drivers/usb/*
Linux-5.4 drivers/usb/*

2 模塊介紹

2.1 模塊功能介紹

USB 有主機(jī)功能和從設(shè)備功能。做主機(jī)時(shí),能連接 U 盤、USB 鼠標(biāo)等 USB 設(shè)備;做從設(shè)備時(shí),具有 ADB 調(diào)試等從設(shè)備功能。

2.2 相關(guān)術(shù)語(yǔ)介紹

表 2-1: 術(shù)語(yǔ)介紹

術(shù)語(yǔ) 說(shuō)明
USB Universal Serial Bus, 通用串行總線
OTG On-The-Go
ADB Android Debug Bridge,Android 調(diào)試橋
Gadget 小配件
HCD Host Controller Driver,主機(jī)控制器驅(qū)動(dòng)
UDC USB Device Controller, USB 設(shè)備控制器
HCI Host Controller Interface,主機(jī)控制器接口
EHCI Enhanced Host Controller Interface,增強(qiáng)型主機(jī)控制器接口
OHCI Open Host Controller Interface,開放式主機(jī)控制器接口

2.3 模塊配置介紹

2.3.1 Device Tree 配置說(shuō)明

設(shè)備樹中存在的是該類芯片所有平臺(tái)的模塊配置,設(shè)備樹文件的路徑為:kernel/linux-4.9/arch/arm64(32 位平臺(tái)為 arm)/boot/dts/sunxi/xxx.dtsi(xxx 為具體芯片型號(hào),如 sun50iw10p1 等), 設(shè)備樹配置如下所示:

? USB0 配置

usbc0:usbc0@0 {

device_type = "usbc0";

compatible = "allwinner,sunxi-otg-manager";

usb_port_type = <2>;

usb_detect_type = <1>;

usb_id_gpio;

usb_det_vbus_gpio;

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

usb_luns = <3>;

usb_serial_unique = <0>;

usb_serial_number = "20080411";

rndis_wceis = <1>;

status = "okay";

};

?

udc:udc-controller@0x05100000 {

compatible = "allwinner,sunxi-udc";

reg = <0x0 0x05100000 0x0 0x1000>, /*udc base*/

<0x0 0x00000000 0x0 0x100>, /*sram base*/

<0x0 0x05200000 0x0 0x1000>; /*usb1 base, for common circuit*/

interrupts = ; /*設(shè)備使用的中斷*/

clocks = <&clk_usbphy0>, <&clk_usbotg>, <&clk_usbehci1>, <&clk_usbphy1>; /*設(shè)備使用的時(shí)鐘*/

status = "okay"; /*是否使能該設(shè)備*/

};

?

ehci0:ehci0-controller@0x05101000 {

compatible = "allwinner,sunxi-ehci0";

reg = <0x0 0x05101000 0x0 0xFFF>, /*hci0 base*/

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>, /*prcm base, for usb standby*/

<0x0 0x05200000 0x0 0x1000>; /*usb1 base, for common circuit*/

interrupts = ;

clocks = <&clk_usbphy0>, <&clk_usbehci0>, <&clk_usbehci1>, <&clk_usbphy1>;

hci_ctrl_no = <0>; /*主機(jī)控制器的序列*/

status = "okay";

};

?

ohci0:ohci0-controller@0x05101400 {

compatible = "allwinner,sunxi-ohci0";

reg = <0x0 0x05101000 0x0 0xFFF>, /*hci0 base*/

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>, /*prcm base, for usb standby*/

<0x0 0x05200000 0x0 0x1000>;/*usb1 base, for common circuit*/

interrupts = ;

clocks = <&clk_usbphy0>, <&clk_usbohci0>, <&clk_usbohci1>, <&clk_usbphy1>;

hci_ctrl_no = <0>;

status = "okay";

};

? USB1 配置

usbc1:usbc1@0 {

device_type = "usbc1";

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

status = "okay";

};

?

ehci1:ehci1-controller@0x05200000 {

compatible = "allwinner,sunxi-ehci1";

reg = <0x0 0x05200000 0x0 0xFFF>,

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>;

interrupts = ;

clocks = <&clk_usbphy1>, <&clk_usbehci1>;

hci_ctrl_no = <1>;

status = "okay";

};

?

ohci1:ohci1-controller@0x05200400 {

compatible = "allwinner,sunxi-ohci1";

reg = <0x0 0x05200000 0x0 0xFFF>,

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>;

interrupts = ;

clocks = <&clk_usbphy1>, <&clk_usbohci1>, <&clk_usbohci1_12m>, <&clk_osc48md4>, <&clk_hosc>, <&clk_losc>;

hci_ctrl_no = <1>;

status = "okay";

};

2.3.2 board.dts 配置說(shuō)明

board.dts 用于保存每一個(gè)板級(jí)平臺(tái)的設(shè)備信息(如 demo 板,perf1 板等),里面的配置信息會(huì)覆蓋上面的 Device Tree 默認(rèn)配置信息。不同 soc、版型及內(nèi)核版本對(duì)應(yīng)的 board.dts 具體路徑如下:device/config/chips/soc/conf igs/{board}/${內(nèi)核版本}/board.dts。

? USB0 配置

usbc0:usbc0@0 {

device_type = "usbc0";

usb_port_type = <0x2>;

usb_detect_type = <0x1>;

usb_id_gpio = <&pio PH 8 0 0 0xffffffff 0xffffffff>;

usb_det_vbus_gpio = "axp_ctrl";

usb_regulator_io = "nocare";

det_vbus_supply = <&usb_power_supply>;

usb_wakeup_suspend = <0>;

usb_luns = <3>;

usb_serial_unique = <0>;

usb_serial_number = "20080411";

rndis_wceis = <1>;

status = "okay";

};

?

注:(1)usb_port_type:usb0口默認(rèn)的模式。

置0:devcie模式;

置1:host模式;

置2:otg模式。

(2)usb_detect_type:usb0口otg檢測(cè)模式。

置0:不做檢測(cè);

置1:vbus/id檢測(cè);

置2:id/dpdm檢測(cè)。

(3)usb_wakeup_suspend:standby模式。

置0:super standby模式;

置1:usb standby模式,支持遠(yuǎn)程喚醒。

?

udc:udc-controller@0x51000000 {

det_vbus_supply = <&usb_power_supply>

}

?

ehci0:ehci0-controller@0x05101000 {

drvvbus-supply = ;

};

?

ohci0:ohci0-controller@0x05101400 {

drvvbus-supply = ;

};

說(shuō)明

若使用 usb standby 模式,需注意如下:

1、IC 支持遠(yuǎn)程喚醒;

2、若條件 1 滿足,相關(guān)硬件部分需嚴(yán)格按照《硬件設(shè)計(jì)文檔》設(shè)計(jì);

3、若條件 1、2 滿足,額外添加屬性 “wakeup-source;”, 啟用 usb standby 功能。

? USB1 配置

usbc1:usbc1@0 {

device_type = "usbc1";

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

status = "okay";

};

?

ehci1:ehci1-controller@0x05200000 {

drvvbus-supply = ;

};

?

ohci1:ohci1-controller@0x05200400 {

drvvbus-supply = ;

};

? Vbus 配置

reg_usb1_vbus: usb1-vbus {

compatible = "regulator-fixed";

gpio = <&pio PH 10 1 2 0 1>;

regulator-name = "usb1-vbus";

regulator-min-microvolt = <5000000>;

regulator-max-microvolt = <5000000>;

regulator-enable-ramp-delay = <1000>;

enable-active-high;

};

2.3.3 kernel menuconfig 配置說(shuō)明

進(jìn)入內(nèi)核根目錄,執(zhí)行 make ARCH=arm menuconfig(64 位平臺(tái)為 make ARCH=arm64 menuconfig)進(jìn)入配置主界面,并按以下步驟操作:

選擇 Device Drivers 選項(xiàng)進(jìn)入下一級(jí)配置,如下圖所示。

poYBAGQFUAuAAVtEAACAcbFbf2w943.png

圖 2-1: Device Drivers 選項(xiàng)配置

選擇 USB support 選項(xiàng),進(jìn)入下一級(jí)配置,如下圖所示。

pYYBAGQFUAuAfzbxAADu0NrG2Go407.png

圖 2-2: USB Support 選項(xiàng)配置

打開如下兩圖的選項(xiàng),如下圖所示。

poYBAGQFUAyAYFqCAAEGgXJGmkc616.png

圖 2-3: USB Support 詳細(xì)配置 1

pYYBAGQFUA2Ado1IAAE3n33w1wU679.png

圖 2-4: USB Support 詳細(xì)配置 2

選擇 USB Gadget Support,進(jìn)入下一級(jí)配置,如下圖所示。

poYBAGQFUA2AOil4AAEmLSt3IcA646.png

圖 2-5: USB Gadget Support 選項(xiàng)配置

打開下圖的選項(xiàng),并在對(duì)應(yīng)配置中打開所需的功能性配置, 如: 需要存儲(chǔ)功能時(shí), 需打開下圖中的 “mass storage” 配置, 如下圖所示。

pYYBAGQFUA6AOuatAADfLt6EGrE750.png

圖 2-6: USB Gadget Support 詳細(xì)配置

進(jìn)入 USB Peripheral Controller,并打開下圖選項(xiàng):

poYBAGQFUA-AUQ31AACoB9RPxfY632.png

圖 2-7: USB Peripheral Controller 詳細(xì)配置

返回上一級(jí),即 USB support,進(jìn)入 SUNXI USB2.0 Dual Role controller support,并打開下圖選項(xiàng),如下圖所示。

pYYBAGQFUA-ANRD4AAB8v7Cisn0227.png

圖 2-8: SUNXI USB2.0 Dual Role Controller Support 詳細(xì)配置

若需支持 MTP PTP 等功能需開啟 TYPEC 配置返回上一級(jí),即 USB support,進(jìn)入 USB Type-C Support,并打開下圖選項(xiàng),如下圖所示:

poYBAGQFUBCAHdOCAAHUvodoe3Y915.png

圖 2-9: USB Type-C Support 詳細(xì)配置

2.4 源碼結(jié)構(gòu)介紹

USB 驅(qū)動(dòng)的源代碼位于內(nèi)核 drivers/usb 目錄下,如下是 sunxi 平臺(tái)相關(guān)源碼:

? Host

drivers/usb/host/

├── ehci_sunxi.c

├── ohci_sunxi.c

├── sunxi_hci.c

├── sunxi_hci.h

? UDC 和 Manager

drivers/usb/sunxi_usb/

├── include

│ ├── sunxi_hcd.h

│ ├── sunxi_sys_reg.h

│ ├── sunxi_udc.h

│ ├── sunxi_usb_board.h

│ ├── sunxi_usb_bsp.h

│ ├── sunxi_usb_config.h

│ ├── sunxi_usb_debug.h

│ └── sunxi_usb_typedef.h

├── Kconfig

├── Makefile

├── manager

│ ├── usbc0_platform.c

│ ├── usbc_platform.h

│ ├── usb_hcd_servers.c

│ ├── usb_hcd_servers.h

│ ├── usb_hw_scan.c

│ ├── usb_hw_scan.h

│ ├── usb_manager.c

│ ├── usb_manager.h

│ ├── usb_msg_center.c

│ └── usb_msg_center.h

├── misc

│ └── sunxi_usb_debug.c

├── udc

│ ├── sunxi_udc_board.c

│ ├── sunxi_udc_board.h

│ ├── sunxi_udc.c

│ ├── sunxi_udc_config.h

│ ├── sunxi_udc_debug.c

│ ├── sunxi_udc_debug.h

│ ├── sunxi_udc_dma.c

│ └── sunxi_udc_dma.h

└── usbc

├── usbc.c

├── usbc_dev.c

├── usbc_i.h

└── usbc_phy.c

2.5 驅(qū)動(dòng)框架介紹

Linux 內(nèi)核提供了完整的 USB 驅(qū)動(dòng)程序框架。USB 總線采用樹形結(jié)構(gòu),在一條總線上只能有唯一的主機(jī)設(shè)備。Linux 內(nèi)核從主機(jī)和設(shè)備兩個(gè)角度觀察 USB 總線結(jié)構(gòu)。下圖是 Linux 內(nèi)核從主機(jī)和設(shè)備兩個(gè)角度觀察 USB 總線結(jié)構(gòu)的示意圖。

poYBAGQFUBGAZSquAAGUMkCwhQ4518.png

圖 2-10: USB 驅(qū)動(dòng)總體結(jié)構(gòu)

USB 子系統(tǒng)主要任務(wù)包括:

a. 注冊(cè)和管理設(shè)備驅(qū)動(dòng);

b. USB 設(shè)備尋找驅(qū)動(dòng),并初始化和配置設(shè)備;

c. 內(nèi)核中表現(xiàn)設(shè)備的樹形結(jié)構(gòu);

d. 與設(shè)備交互。

2.6 Gadget 配置

Gadget 是指具有 USB 設(shè)備控制器的 USB 設(shè)備,根據(jù)具體的功能配置,連接到 PC 后可以作為 mass storage、uac 等設(shè)備。Linux 有原生 gadget 框架,通用的配置流程可參考下文。

2.6.1 打開內(nèi)核配置

需在 “USB functions configurable through configfs” 下選擇需要的功能。

pYYBAGQFUBGAEdfoAADMLbfXi2U621.png

圖 2-11: linux-4.x usb gadget 配置選擇

2.6.2 linux-4.x/linux-5.4 USB Gadget 配置流程

Linux-4.x/Linux-5.4 使用 configfs 框架實(shí)現(xiàn) composite gadget 功能。具體流程如下:

? 掛載 configs:

mount -t configfs none /sys/kernel/config

掛載完成之后在/sys/kernel/config 目錄下就會(huì)生成 usb_gadget/目錄。

? 建立 gadgets:

mkdir /sys/kernel/config/usb_gadget/g1

創(chuàng)建g1/目錄之后,該目錄下會(huì)生成很多配置目錄,這里的g1表示 gadget 1,一個(gè) UDC 對(duì)應(yīng)一個(gè) gadget,如果你的 SOC 上有多個(gè) gadget,可以創(chuàng)建多個(gè)gx目錄。

? 寫入 gadget 的 PID、VID、序列號(hào)等信息:

echo "VID" > /sys/kernel/config/usb_gadget/g1/idVendor echo "PID" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "manufacturer" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer echo "product" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product

? 建立 gadget 相關(guān)配置 configurations

mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409

? 建立功能 functions

mkdir /sys/kernel/config/usb_gadget/g1/functions/.

:function name :任意字符串

? 建立功能和配置的鏈接

ln -s /sys/kernel/config/usb_gadget/g1/functions/. /sys/kernel/config/ usb_gadget/g1/configs/c.1

? 使能 gadget

echo > UDC

常見 Gadget 功能的配置方式見附錄。

2.7 端點(diǎn)配置

在 Gadget 配置使用過(guò)程中,可能出現(xiàn)端點(diǎn)的默認(rèn)配置方式無(wú)法滿足需求的情況,故需對(duì)端點(diǎn)進(jìn)行修改滿足需求。可參考現(xiàn)有的端點(diǎn)進(jìn)行修改。譬如將批量端點(diǎn)改成中斷端點(diǎn),參考現(xiàn)有的中斷端點(diǎn)進(jìn)行修改即可。改動(dòng)內(nèi)容包括端點(diǎn) fifo 大小,端點(diǎn)屬性,端點(diǎn)方向。

2.7.1 端點(diǎn) fifo 大小

以4k平臺(tái)為例: static const struct sw_udc_fifo ep_fifo[] = { {ep0name, 0, 512, 0},/*name, fifo_addr, fifo_size, double_fifo*/ {ep1in_bulk_name, 512, 512, 0}, {ep1out_bulk_name, 1024, 512, 0}, {ep2in_bulk_name, 1536, 512, 0}, {ep2out_bulk_name, 2048, 512, 0}, {ep3_iso_name, 2560, 1024, 0}, {ep4_int_name, 3584, 512, 0}, };

2.7.2 端點(diǎn)的屬性

.ep[2] = { .num = 1, .ep = { .name = ep1out_bulk_name, .ops = &sunxi_udc_ep_ops, .maxpacket = SW_UDC_EP_FIFO_SIZE, .maxpacket_limit = SW_UDC_EP_FIFO_SIZE, .caps = USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT), }, .dev = &sunxi_udc, .bEndpointAddress = (USB_DIR_OUT | 1), .bmAttributes = USB_ENDPOINT_XFER_BULK, },

2.7.3 定義端點(diǎn)的方向

/** * ep_fifo_in[i] = {n} i: the physic ep index, n: ep_fifo's index for the ep * * eg: ep_fifo_in[2] = {3} ===> ep2_in is in ep_fifo[3] * * ep3_iso_name and ep4_int_name cannot be tx or rx simultaneously. * */ static const int ep_fifo_in[] = {0, 1, 3, 5, 6, 7}; static const int ep_fifo_out[] = {0, 2, 4, 5, 6, 8};

2.8 調(diào)試方法

2.8.1 調(diào)試節(jié)點(diǎn)

2.8.1.1 USB0 調(diào)試節(jié)點(diǎn)

查看 USB0 當(dāng)前 Role

cat /sys/devices/platform/soc/usbc0/otg_role

手動(dòng)切換到 Host 模式

cat /sys/devices/platform/soc/usbc0/usb_host

手動(dòng)切換到 Device 模式

cat /sys/devices/platform/soc/usbc0/usb_device

2.8.1.2 USB1 調(diào)試節(jié)點(diǎn)

卸載主機(jī)驅(qū)動(dòng)

通過(guò)下述命令找到主機(jī)驅(qū)動(dòng)節(jié)點(diǎn)及對(duì)應(yīng)路徑

find -name ehci_enable find -name ohci_enable

然后根據(jù)上述結(jié)果,按如下命令卸載主機(jī)驅(qū)動(dòng) (以 t5 平臺(tái)為例)

echo 0 > sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable echo 0 > sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

加載主機(jī)驅(qū)動(dòng)

通過(guò)下述命令找到主機(jī)驅(qū)動(dòng)節(jié)點(diǎn)及對(duì)應(yīng)路徑

find -name ehci_enable find -name ohci_enable

然后根據(jù)上述結(jié)果,按如下命令加載主機(jī)驅(qū)動(dòng) (以 t5 平臺(tái)為例)

echo 1 > sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable echo 1 > sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

2.8.2 眼圖測(cè)試

2.8.2.1 USB Device 眼圖測(cè)試

獲取otg_ed_test的路徑path find /sys/ -name otg_ed_test 測(cè)試眼圖命令 echo test_pack > path/otg_ed_test

2.8.2.2 USB Host 眼圖測(cè)試

獲取ed_test的路徑path find /sys/ -name ed_test 測(cè)試眼圖命令 echo test_pack > path/ed_test

3 FAQ

3.1 常見問題

3.1.1 USB 基本功能異常排查

3.1.1.1 USB Host 基本功能異常排查步驟

? 多找?guī)讉€(gè) USB 設(shè)備試試,排除個(gè)別 USB 設(shè)備本身的問題。

? 多更換幾根 USB 線纜試試,排除個(gè)別 USB 線纜的問題。

? 多找?guī)讉€(gè) PC 主機(jī)做相同的實(shí)驗(yàn),作為參考對(duì)比。若在 PC 有相同現(xiàn)象,則認(rèn)為正常。

? 若硬件有多個(gè) USB 口,嘗試同樣條件下測(cè)試其他 USB 口的主機(jī)功能是否正常。

? 樣機(jī)設(shè)備 USB 口外接獨(dú)立供電的 USB-HUB 設(shè)備,再將 USB 設(shè)備連接到 USB-HUB 上,確認(rèn)主機(jī)功能是否正常。

? 確認(rèn)主機(jī)驅(qū)動(dòng)是否加載成功。

(1)若為 USB0 口,則可通過(guò)如下方式確認(rèn):

cat /sys/devices/platform/soc/usbc0/otg_role

(2)若為 USB1 口,可通過(guò)如下方式確認(rèn):

cat sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable cat sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

若為0,則沒有加載Host驅(qū)動(dòng)。

? 重新加載 Host 驅(qū)動(dòng),確認(rèn)此時(shí)功能是否正常。

(1)若為 USB0 口,則可通過(guò)如下方式:

方式1:重新插拔OTG線。 方式2:手動(dòng)切換到Host模式。

(2)若為 USB1 口,則可通過(guò)卸載驅(qū)動(dòng)、再加載驅(qū)動(dòng)。

? 對(duì)比 SDK 代碼與最新發(fā)布的代碼或者補(bǔ)丁, 確認(rèn)代碼是否更新到最新。

? 同樣條件下,分別打印出功能異常板子和功能正常板子的相關(guān)寄存器,并進(jìn)行對(duì)比,確認(rèn)是否有不同之處。

? 出現(xiàn)異常時(shí),測(cè)試 USB 高速眼圖是否正常。

? 若眼圖測(cè)試未通過(guò),可嘗試調(diào)節(jié)眼圖參數(shù)。

3.1.1.2 USB Device 基本功能異常排查步驟

? 多換幾個(gè) PC 主機(jī)做相同的測(cè)試,排除個(gè)別 PC 的問題。

? 多更換幾根 USB 線纜做相同的測(cè)試,排除個(gè)別 USB 線纜的問題。

? 確認(rèn) Device 驅(qū)動(dòng)是否加載成功,可通過(guò)如下方式:

(1)通過(guò) Log。

[ 104.732695] insmod_device_driver [ 104.732695] device_chose finished!

(2)通過(guò)節(jié)點(diǎn)查看當(dāng)前 Role。

? 重新加載 Device 驅(qū)動(dòng),確認(rèn)此時(shí)功能是否恢復(fù)正常。

(1)重新插拔 USB 線。

(2)手動(dòng)切換到 Device 模式。

? 對(duì)比 SDK 代碼與最新發(fā)布的代碼或者補(bǔ)丁, 確認(rèn)代碼是否更新到最新。

? 同樣條件下,分別打印出功能異常板子和功能正常板子的相關(guān)寄存器,并進(jìn)行對(duì)比,確認(rèn)是否有異常。

? 出現(xiàn)異常時(shí),確認(rèn) USB 高速眼圖是否正常。

3.1.2 配置其他 gadget 功能前關(guān)閉 adb 功能時(shí)卻報(bào)異常的解決辦法

問題產(chǎn)生的原因是:僅執(zhí)行./etc/adb_conf.sh stop 只是強(qiáng)制殺死 adb 守護(hù)進(jìn)程,但 adb 功能鏈接仍存,當(dāng)配置其他 gadget 功能時(shí),便會(huì)復(fù)合 adb 鏈接導(dǎo)致異常,故在需要配置其他 gadget 功能時(shí),除了強(qiáng)制殺死 adb 守護(hù)進(jìn)程還須移除 adb 功能鏈接,在小機(jī)中操作步驟如下:

1、./etc/adb_conf.sh stop 2、umount /sys/kernel/config 3、rm -fr /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb

執(zhí)行以上操作,正常關(guān)閉 adb 后,根據(jù)需要的 gadget 功能,參考【附錄】章節(jié)進(jìn)行配置即可。

4 附錄

4.1 Linux-4.x/Linux-5.4 Gadget 配置示例

4.1.1 小機(jī)做 mass storage

dd if=/dev/zero of=/dev/a.bin bs=1M count=100 mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0001" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo /dev/a.bin > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說(shuō)明

如果需要增加 lun,在 functions/mass_storage.usb0 下:

mkdir lun.1

mkdir lun.2

4.1.2 小機(jī)做 cdrom

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0xa4ac" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo 1 > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom echo /tmp/phoenixcard.iso > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ lun.0/file ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/mass_storage.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說(shuō)明

/tmp/phoenixcard.iso 根據(jù)實(shí)際情況更改。

4.1.4 小機(jī)做 UAC2

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1d61" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0101" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uac2.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uac2.usb0/ /sys/kernel/config/usb_gadget/ g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.5 小機(jī)做 UVC

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x100d" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ wHeight echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwFrameInterval echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwDefaultFrameInterval echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p /dwMinBitRate echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p /dwMaxBitRate echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwMaxVideoFrameBufferSize mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1 /configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.6 小機(jī)做 HID

mount -t configfs none /sys/kernel/config/ mkdir /sys/kernel/config/usb_gadget/g1 echo 0x0525 >/sys/kernel/config/usb_gadget/g1/idVendor echo 0xa4ac >/sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 echo 512 >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length echo -ne >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 >/sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 >/sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說(shuō)明

report_desc 根據(jù)需求自定義。

4.1.7 小機(jī)做 rndis

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x200a" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.8 小機(jī)做 acm

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0007" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/acm.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/acm.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/acm.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.9 小機(jī)做 adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0002" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "20080411" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber echo "Android" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/ configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.10 小機(jī)做 mass storage+adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0003" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "20080411" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber echo "Android" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo ${BLOCK_PATH} > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/mass_storage.usb0 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/ configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.11 小機(jī)做 uvc+uac1

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x100d" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0 mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwDefaultFrameInterval echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1 /configs/c.1/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.12 小機(jī)做 hid+cdrom

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0xa4ac" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo 512 >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length echo -ne >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb0 echo 1 > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom echo /tmp/phoenixcard.iso > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.13 小機(jī)做 rndis+adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0010" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 >/sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 >/sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls/sys/class/udc/|xargs echo>/sys/kernel/config/usb_gadget/g1/UDC

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1410

    瀏覽量

    41118
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8147

    瀏覽量

    270972
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11465

    瀏覽量

    212827
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    608

    瀏覽量

    34531
  • 開發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    7738
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32F10xxx硬件開發(fā)指南

    官方STM32F10xxx硬件開發(fā)指南
    發(fā)表于 04-14 14:59 ?2次下載

    GD32L23x硬件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《GD32L23x硬件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 02-07 17:26 ?2次下載
    GD32L23x硬件<b class='flag-5'>開發(fā)指南</b>

    GD32F4xx硬件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《GD32F4xx硬件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 02-07 17:20 ?0次下載
    GD32F4xx硬件<b class='flag-5'>開發(fā)指南</b>

    AN154 GD32VW553快速開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《AN154 GD32VW553快速開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-17 15:39 ?1次下載
    AN154 GD32VW553快速<b class='flag-5'>開發(fā)指南</b>

    VCA5807開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《VCA5807開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 16:56 ?3次下載
    VCA5807<b class='flag-5'>開發(fā)指南</b>

    超值音棒參考設(shè)計(jì)套件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《超值音棒參考設(shè)計(jì)套件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-21 09:16 ?0次下載
    超值音棒參考設(shè)計(jì)套件<b class='flag-5'>開發(fā)指南</b>

    BQ7690x軟件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《BQ7690x軟件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-07 10:19 ?1次下載
    BQ7690x軟件<b class='flag-5'>開發(fā)指南</b>

    MSP430? MCU開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《MSP430? MCU開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-06 09:57 ?0次下載
    MSP430? MCU<b class='flag-5'>開發(fā)指南</b>

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎(chǔ)入門vim 編輯器

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎(chǔ)入門vim 編輯器
    的頭像 發(fā)表于 10-25 14:56 ?613次閱讀
    【北京迅為】itop-龍芯2k1000<b class='flag-5'>開發(fā)指南</b><b class='flag-5'>Linux</b>基礎(chǔ)入門vim 編輯器

    MSP430 MCU開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《MSP430 MCU開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 17:19 ?2次下載

    PGA460軟件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《PGA460軟件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 10:30 ?5次下載
    PGA460軟件<b class='flag-5'>開發(fā)指南</b>

    LVGL開發(fā)指南介紹

    電子發(fā)燒友網(wǎng)站提供《LVGL開發(fā)指南介紹.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 10:24 ?20次下載

    【北京迅為】《stm32mp157開發(fā)板嵌入式linux開發(fā)指南》第五章 Ubuntu使用apt-get下載

    【北京迅為】《stm32mp157開發(fā)板嵌入式linux開發(fā)指南》第五章 Ubuntu使用apt-get下載
    的頭像 發(fā)表于 09-03 16:26 ?1105次閱讀
    【北京迅為】《stm32mp157<b class='flag-5'>開發(fā)</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開發(fā)指南</b>》第五章 Ubuntu使用apt-get下載

    BQ769x2軟件開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《BQ769x2軟件開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-26 09:12 ?1次下載
    BQ769x2軟件<b class='flag-5'>開發(fā)指南</b>

    RA/RX電機(jī)應(yīng)用開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《RA/RX電機(jī)應(yīng)用開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-15 09:44 ?0次下載
    RA/RX電機(jī)應(yīng)用<b class='flag-5'>開發(fā)指南</b>