海思USB2.0、USB3.0 Device UVC规格热插拔会不识别

JZ_hacker 2020-03-11 13:56:02 2760

问题现象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

  1. 软件代码
    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 */
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
JZ_hacker
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区