海思USB2.0、USB3.0 Device UVC规格热插拔会不识别
问题现象1:
当使用Hi3519V10X/Hi3559V100 USB3.0 Device UVC规格时,正常热插拔会必现不识别的问题。
问题现象2:
当使用Hi3516CV300 USB2.0 Device UVC规格时,快速热插拔出现概率不识别问题, 此两种问题现象的解决方案需要设计插入/拔出状态的检测电路,具体请参考
使用两个电阻将5V0_VBUS信号分压,而后将分压信号接到Hi3519V10X/Hi3559V100/HI3516CV300的GPIO,用于检测设备的插入/拔出状态。GPIO检测到高电平时,认为设备插入;GPIO检测到低电平时,认为设备拔出。
注意:
-
当Hi3519V10X/Hi3559V100/Hi3516CV300通过USB3.0 、USB2.0接口用作Device设备时,单板不能为USB3.0、USB2.0接口的5V0_VBUS电源供电。
-
上述GPIO必须为带施密特触发器的GPIO管脚,具体可参考《Hi3519V100 _PINOUT_CN》、《Hi3519V101_PINOUT_CN》、Hi3516CV300 _PINOUT_CN》或《Hi3559V100/Hi3556V100_PINOUT_CN》中的管脚配置说明和管脚信息表中的信息来查找满足要求的GPIO管脚,建议选择GPIO1_0。
-
选择其他GPIO,需要修改相应的软件代码,使得硬件设计和软件设计一致,修改方法请参考如下描述(以GPIO1_0描述为例)。
a) USB2.0软件添加配置
配置路径为: Device Drivers ---> [] USB support ---> <> USB Gadget Support ---> [] Hisilicon USB2.0 Device Controller SUPPORT ---> <> Hisilicon USB2.0 Device Support GPIO CTRL
b) USB3.0软件添加配置
软件添加配置
配置路径为: Device Drivers ---> [] USB support ---> <> USB Gadget Support ---> [] Hisilicon USB3.0 Device Controller SUPPORT ---> <> Hisilicon USB3.0 Device Support GPIO
- 软件代码 a) USB2.0软件代码,以GPIO3_6为例:
只需要修改./drivers/usb/gadget/composite.c一个文件中GPIO相关寄存器的宏定义,修改方法相同,具体如下。
#define GPIO_MODE ioremap_nocache(0x12040020, 0x100)
#define GPIO3_BASE ioremap_nocache(0x12143100, 0x400)
#define USB_PWREN 0x44
#define GPIO3_DIR 0x300
#define GPIO3_IC 0x31c
#define GPIO3_IE 0x310
#define GPIO3_6_DIR (1<<6)
#define GPIO3_6_IBE (1<<6)
#define GPIO3_6_IC (1<<6)
#define GPIO3_6_IE (1<<6)
#define GPIO3_6_DATA 0x0
具体修改方法如下:
以下为GPIO3_6的宏定义,选择其他GPIO时,需要将宏定义修改为对应的GPIO。
#define GPIO3_6_IE (1<<0) /*GPIO的IE寄存器的bit [6] 如果是GPIO3_2就要改成bit[2]*/
#define GPIO3_6_IC (1<<0) /*GPIO的IC寄存器的bit [6] 如果是GPIO3_2就要改成bit[2]*/
#define GPIO_MODE ioremap_nocache(0x12040020, 0x100)/*管脚复用 GPIO3_6配置成GPIO模式*/
#define GPIO3_BASE ioremap_nocache(0x12143100, 0x400)/*设置GPIO的偏移基地址,在GPIO实际基地址加了0x100 */
#define GPIO3_DIR 0x300 /*GPIO的实际使用地址,在代码中以GPIO3_BASE + GPIO3_DIR 方式使用*/
b) USB3.0 软件代码
只需要修改./drivers/phy/phy-hisi-usb3.c和./drivers/usb/gadget/composite.c两个文件中GPIO相关寄存器的宏定义,修改方法相同,具体如下。
两个文件需要修改的宏定义有:
#define GPIO1_0_IE (1<<0)
#define GPIO1_0_IC (1<<0)
#define GPIO1_IE __io_address(0x12141410)
#define GPIO1_0_DATA __io_address(0x12141004)
#define GPIO1_IC __io_address(0x1214141c)
具体修改方法如下:
以下为GPIO1_0的宏定义,选择其他GPIO时,需要将宏定义修改为对应的GPIO。
#define GPIO1_0_IE (1<<0) /*GPIO的IE寄存器的bit [0] 如果是GPIO3_2就要改成bit[2]*/
#define GPIO1_0_IC (1<<0) /*GPIO的IC寄存器的bit [0] 如果是GPIO3_2就要改成bit[2]*/
#define GPIO1_IE __io_address(0x12141410) /*此为GPIO的IE寄存器的基址和偏移地址,如果是GPIO3_2就要改成0x12143410*/
#define GPIO1_0_DATA __io_address(0x12141004) /*此为GPIO的DATA寄存器的基址和偏移地址。 如果是GPIO3_2 就要改成0x12143010*/
#define GPIO1_IC __io_address(0x1214141c) /*此为GPIO的IC寄存器的基址和偏移地址。如果是GPIO3_2就要改成0x1214341c */
- 分享
- 举报

-
浏览量:583次2020-03-05 15:10:19
-
浏览量:360次2019-04-08 17:11:22
-
浏览量:498次2020-03-03 22:16:15
-
浏览量:589次2020-06-19 15:39:47
-
浏览量:412次2020-07-22 14:59:24
-
浏览量:612次2020-03-11 12:27:56
-
浏览量:1396次2019-09-21 19:14:57
-
浏览量:627次2017-11-23 12:41:48
-
浏览量:6129次2018-09-27 20:23:02
-
浏览量:782次2019-01-03 17:21:58
-
浏览量:363次2019-08-01 15:42:00
-
浏览量:401次2018-07-23 17:07:02
-
浏览量:1253次2017-08-14 16:05:50
-
浏览量:782次2020-03-12 12:39:37
-
浏览量:647次2020-04-22 20:21:45
-
浏览量:826次2019-06-27 08:53:15
-
浏览量:433次2019-05-21 15:35:56
-
浏览量:460次2019-07-15 16:16:15
-
浏览量:488次2017-12-02 22:05:15
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖

JZ_hacker







举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明