USB使用说明.txt 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. ark1668ed芯片USB使用说明:
  2. 一、uboot阶段支持U盘升级
  3. 1、uboot配置中添加USB选项(默认已添加):
  4. 1、ARM architecture --->
  5. [] usb support //暂未使用,待后续拓展
  6. 2、Command line interface --->
  7. Device access commands --->
  8. [*] usb
  9. 3、Device Drivers --->
  10. [*] USB support --->
  11. --- USB support
  12. [*] DesignWare USB2 Core support
  13. (64) Data buffer size in kB
  14. [*] USB Mass Storage support
  15. (1000) Timeout in milliseconds for USB HUB connection
  16. 2、uboot设备树中添加USB配置参数(默认已添加):
  17. 由于USB初始化时间过长,所以默认只添加了一路USB0。
  18. 路径:u-boot/arch/arm/dts/ark1668ed_${BOARD_TYPE}.dts //BOARD_TYPE为devb(nand版本)或者devb_emmc(emmc版本)。
  19. 配置如下:
  20. usb0_phy: usb0-phy {
  21. status = "okay";
  22. };
  23. usb0: usb@40000000 {
  24. compatible = "snps,dwc2";
  25. #address-cells = <1>;
  26. #size-cells = <0>;
  27. reg = <0x40000000 0x40000>;
  28. interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
  29. phys = <&usb0_phy>;
  30. phy-names = "usb0-phy";
  31. dr_mode = "host";
  32. status = "okay";
  33. };
  34. 二、内核中配置USB
  35. 1、linux内核配置中添加USB选项(默认已添加):
  36. Device Drivers
  37. [*] USB support --->
  38. <*> Support for Host-side USB
  39. [*] Enable USB persist by default
  40. (2) Default autosuspend delay
  41. (1) Default authorization mode for USB devices
  42. <*> USB Mass Storage support
  43. <*> USB Attached SCSI
  44. <M> DesignWare USB2 DRD Core Support //【为加快开机启动时间,此处配置为ko模式】
  45. DWC2 Mode Selection (Dual Role mode) --->
  46. <*> USB Gadget Support --->
  47. --- USB Gadget Support
  48. (2) Maximum VBUS Power usage (2-500 mA)
  49. (2) Number of storage pipeline buffers
  50. <*> USB Gadget functions configurable through configfs
  51. [*] Network Control Model (CDC NCM)
  52. [*] USB Gadget Target iap2 gadget
  53. [*] USB Gadget Target adb gadget
  54. 2、linux内核配置设备树文件(默认已添加):
  55. 根据需要修改linux/arch/arm/boot/dts/arkmicro/ark1668ed.dtsi文件中的usb和usb phy的配置。
  56. 配置如下:
  57. usb0_phy: usb0-phy {
  58. compatible = "usb-nop-xceiv";
  59. #phy-cells = <0>;
  60. status = "OK";
  61. };
  62. usb1_phy: usb1-phy {
  63. compatible = "usb-nop-xceiv";
  64. #phy-cells = <0>;
  65. status = "OK";
  66. };
  67. usb0: usb@40000000 {
  68. ......
  69. //status = "disabled"; //默认USB0开启,屏蔽USB0则配置status = "disabled"
  70. };
  71. usb1: usb@40c00000 {
  72. ......
  73. //status = "disabled"; //默认USB1开启,屏蔽USB1则配置status = "disabled"
  74. };
  75. 三、编译并升级系统
  76. 升级操作参考 "doc/升级说明.txt"。
  77. 四、进入系统后加载驱动并挂载U盘
  78. 第一步:加载USB驱动
  79. insmod /1ib/modules/6.12.16/kernel/drivers/usb/dwc2/dwc2.ko
  80. 第二步:置otg
  81. 待完善(暂时忽略)
  82. 此时插拔U盘,在/dev/目录下会有节点生成:/dev/sd*
  83. 插入U盘log参考如下:
  84. / # dmesg -c
  85. usb 1-1: new high-speed USB device number 2 using dwc2
  86. usb-storage 1-1:1.0: USB Mass Storage device detected
  87. scsi host0: usb-storage 1-1:1.0
  88. scsi 0:0:0:0: Direct-Access Multiple Card Reader 1.00 PQ: 0 ANSI: 0
  89. sd 0:0:0:0: Attached scsi generic sg0 type 0
  90. sd 0:0:0:0: [sda] 30539776 512-byte logical blocks: (15.6 GB/14.6 GiB)
  91. sd 0:0:0:0: [sda] Write Protect is off
  92. sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
  93. sd 0:0:0:0: [sda] No Caching mode page found
  94. sd 0:0:0:0: [sda] Assuming drive cache: write through
  95. sda:
  96. sd 0:0:0:0: [sda] Attached SCSI removable disk
  97. FAT-fs (sda): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
  98. 拔掉U盘log参考如下:
  99. / # dmesg -c
  100. usb 1-1: USB disconnect, device number 2
  101. 第三步:手动挂载测试(按照上述参考节点:/dev/sda)
  102. 命令:mount /dev/sda /mnt
  103. 挂载成功后可以看到U盘下的文件。
  104. 五、启动ncm模式
  105. 切换为device模式,详细参考build_ncm_iap.sh脚本,如下所示:
  106. /# vi build_ncm_iap.sh
  107. #!/bin/sh
  108. if [ $# -eq 0 ];
  109. then
  110. usb_idx=0
  111. else
  112. usb_idx=1
  113. fi
  114. # config ncm function
  115. KER_CONF="`grep '/sys/kernel/config' /proc/mounts`"
  116. if [ -z "$KER_CONF" ]; then
  117. mount -t configfs none /sys/kernel/config
  118. fi
  119. if [ ! -d /sys/kernel/config/usb_gadget/g1 ]; then
  120. mkdir /sys/kernel/config/usb_gadget/g1
  121. fi
  122. if [ ! -d /sys/kernel/config/usb_gadget/g1/strings/0x409 ]; then
  123. mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
  124. fi
  125. if [ ! -d /sys/kernel/config/usb_gadget/g1/functions/ncm.g1 ]; then
  126. mkdir /sys/kernel/config/usb_gadget/g1/functions/ncm.g1
  127. fi
  128. #if [ ! -d /sys/kernel/config/usb_gadget/g1/functions/iap.g1 ]; then
  129. # mkdir /sys/kernel/config/usb_gadget/g1/functions/iap.g1
  130. #fi
  131. if [ ! -d /sys/kernel/config/usb_gadget/g1/configs/c.1 ]; then
  132. mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
  133. fi
  134. if [ ! -d /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ]; then
  135. mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
  136. fi
  137. echo "0x0525" > /sys/kernel/config/usb_gadget/g1/idVendor
  138. echo "0xa4a1" > /sys/kernel/config/usb_gadget/g1/idProduct
  139. echo "012345678adcdef" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
  140. echo "Arkmicro.Inc" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
  141. echo "Ark1668e USB Device" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
  142. echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
  143. echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
  144. if [ ! -L /sys/kernel/config/usb_gadget/g1/configs/c.1/ncm.g1 ]; then
  145. ln -s /sys/kernel/config/usb_gadget/g1/functions/ncm.g1/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ncm.g1
  146. fi
  147. #if [ ! -L /sys/kernel/config/usb_gadget/g1/configs/c.1/iap.g1 ]; then
  148. # ln -s /sys/kernel/config/usb_gadget/g1/functions/iap.g1/ /sys/kernel/config/usb_gadget/g1/configs/c.1/iap.g1
  149. #fi
  150. #ls /sys/class/udc
  151. # enable udc
  152. #echo 70300000.usb > /sys/kernel/config/usb_gadget/g1/UDC
  153. if [ $usb_idx -eq 0 ];
  154. then
  155. echo 40000000.usb > /sys/kernel/config/usb_gadget/g1/UDC
  156. sleep 0.1
  157. echo device > /sys/class/usb_role/40000000.usb-role-switch/role
  158. else
  159. echo 40c00000.usb > /sys/kernel/config/usb_gadget/g1/UDC
  160. sleep 0.1
  161. echo device > /sys/class/usb_role/40c00000.usb-role-switch/role
  162. fi