| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- ark1668ed芯片USB使用说明:
- 一、uboot阶段支持U盘升级
- 1、uboot配置中添加USB选项(默认已添加):
- 1、ARM architecture --->
- [] usb support //暂未使用,待后续拓展
- 2、Command line interface --->
- Device access commands --->
- [*] usb
- 3、Device Drivers --->
- [*] USB support --->
- --- USB support
- [*] DesignWare USB2 Core support
- (64) Data buffer size in kB
- [*] USB Mass Storage support
- (1000) Timeout in milliseconds for USB HUB connection
- 2、uboot设备树中添加USB配置参数(默认已添加):
- 由于USB初始化时间过长,所以默认只添加了一路USB0。
- 路径:u-boot/arch/arm/dts/ark1668ed_${BOARD_TYPE}.dts //BOARD_TYPE为devb(nand版本)或者devb_emmc(emmc版本)。
- 配置如下:
- usb0_phy: usb0-phy {
- status = "okay";
- };
- usb0: usb@40000000 {
- compatible = "snps,dwc2";
- #address-cells = <1>;
- #size-cells = <0>;
- reg = <0x40000000 0x40000>;
- interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
- phys = <&usb0_phy>;
- phy-names = "usb0-phy";
- dr_mode = "host";
- status = "okay";
- };
- 二、内核中配置USB
- 1、linux内核配置中添加USB选项(默认已添加):
- Device Drivers
- [*] USB support --->
- <*> Support for Host-side USB
- [*] Enable USB persist by default
- (2) Default autosuspend delay
- (1) Default authorization mode for USB devices
- <*> USB Mass Storage support
- <*> USB Attached SCSI
- <M> DesignWare USB2 DRD Core Support //【为加快开机启动时间,此处配置为ko模式】
- DWC2 Mode Selection (Dual Role mode) --->
- <*> USB Gadget Support --->
- --- USB Gadget Support
- (2) Maximum VBUS Power usage (2-500 mA)
- (2) Number of storage pipeline buffers
- <*> USB Gadget functions configurable through configfs
- [*] Network Control Model (CDC NCM)
- [*] USB Gadget Target iap2 gadget
- [*] USB Gadget Target adb gadget
- 2、linux内核配置设备树文件(默认已添加):
- 根据需要修改linux/arch/arm/boot/dts/arkmicro/ark1668ed.dtsi文件中的usb和usb phy的配置。
- 配置如下:
- usb0_phy: usb0-phy {
- compatible = "usb-nop-xceiv";
- #phy-cells = <0>;
- status = "OK";
- };
-
- usb1_phy: usb1-phy {
- compatible = "usb-nop-xceiv";
- #phy-cells = <0>;
- status = "OK";
- };
- usb0: usb@40000000 {
- ......
- //status = "disabled"; //默认USB0开启,屏蔽USB0则配置status = "disabled"
- };
- usb1: usb@40c00000 {
- ......
- //status = "disabled"; //默认USB1开启,屏蔽USB1则配置status = "disabled"
- };
- 三、编译并升级系统
- 升级操作参考 "doc/升级说明.txt"。
- 四、进入系统后加载驱动并挂载U盘
- 第一步:加载USB驱动
- insmod /1ib/modules/6.12.16/kernel/drivers/usb/dwc2/dwc2.ko
- 第二步:置otg
- 待完善(暂时忽略)
- 此时插拔U盘,在/dev/目录下会有节点生成:/dev/sd*
- 插入U盘log参考如下:
- / # dmesg -c
- usb 1-1: new high-speed USB device number 2 using dwc2
- usb-storage 1-1:1.0: USB Mass Storage device detected
- scsi host0: usb-storage 1-1:1.0
- scsi 0:0:0:0: Direct-Access Multiple Card Reader 1.00 PQ: 0 ANSI: 0
- sd 0:0:0:0: Attached scsi generic sg0 type 0
- sd 0:0:0:0: [sda] 30539776 512-byte logical blocks: (15.6 GB/14.6 GiB)
- sd 0:0:0:0: [sda] Write Protect is off
- sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
- sd 0:0:0:0: [sda] No Caching mode page found
- sd 0:0:0:0: [sda] Assuming drive cache: write through
- sda:
- sd 0:0:0:0: [sda] Attached SCSI removable disk
- FAT-fs (sda): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
- 拔掉U盘log参考如下:
- / # dmesg -c
- usb 1-1: USB disconnect, device number 2
- 第三步:手动挂载测试(按照上述参考节点:/dev/sda)
- 命令:mount /dev/sda /mnt
- 挂载成功后可以看到U盘下的文件。
- 五、启动ncm模式
- 切换为device模式,详细参考build_ncm_iap.sh脚本,如下所示:
-
- /# vi build_ncm_iap.sh
- #!/bin/sh
- if [ $# -eq 0 ];
- then
- usb_idx=0
- else
- usb_idx=1
- fi
- # config ncm function
- KER_CONF="`grep '/sys/kernel/config' /proc/mounts`"
- if [ -z "$KER_CONF" ]; then
- mount -t configfs none /sys/kernel/config
- fi
- if [ ! -d /sys/kernel/config/usb_gadget/g1 ]; then
- mkdir /sys/kernel/config/usb_gadget/g1
- fi
- if [ ! -d /sys/kernel/config/usb_gadget/g1/strings/0x409 ]; then
- mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
- fi
- if [ ! -d /sys/kernel/config/usb_gadget/g1/functions/ncm.g1 ]; then
- mkdir /sys/kernel/config/usb_gadget/g1/functions/ncm.g1
- fi
- #if [ ! -d /sys/kernel/config/usb_gadget/g1/functions/iap.g1 ]; then
- # mkdir /sys/kernel/config/usb_gadget/g1/functions/iap.g1
- #fi
- if [ ! -d /sys/kernel/config/usb_gadget/g1/configs/c.1 ]; then
- mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
- fi
- if [ ! -d /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ]; then
- mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
- fi
- echo "0x0525" > /sys/kernel/config/usb_gadget/g1/idVendor
- echo "0xa4a1" > /sys/kernel/config/usb_gadget/g1/idProduct
- echo "012345678adcdef" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
- echo "Arkmicro.Inc" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
- echo "Ark1668e USB Device" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
- echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
- echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
- if [ ! -L /sys/kernel/config/usb_gadget/g1/configs/c.1/ncm.g1 ]; then
- ln -s /sys/kernel/config/usb_gadget/g1/functions/ncm.g1/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ncm.g1
- fi
- #if [ ! -L /sys/kernel/config/usb_gadget/g1/configs/c.1/iap.g1 ]; then
- # ln -s /sys/kernel/config/usb_gadget/g1/functions/iap.g1/ /sys/kernel/config/usb_gadget/g1/configs/c.1/iap.g1
- #fi
- #ls /sys/class/udc
- # enable udc
- #echo 70300000.usb > /sys/kernel/config/usb_gadget/g1/UDC
- if [ $usb_idx -eq 0 ];
- then
- echo 40000000.usb > /sys/kernel/config/usb_gadget/g1/UDC
- sleep 0.1
- echo device > /sys/class/usb_role/40000000.usb-role-switch/role
- else
- echo 40c00000.usb > /sys/kernel/config/usb_gadget/g1/UDC
- sleep 0.1
- echo device > /sys/class/usb_role/40c00000.usb-role-switch/role
- fi
|