上图的USBH_EN(对应于GPG6)是用于对USB HOST供电的,这个需要在BSP中进行控制,可在init.c文件的OEMInit() ->ConfigureGPIO()函数中假如下面的代码:
//Ser GPG6 to Output an USBH_EN
s2440IOP->GPGCON &= ~(3<<12);
s2440IOP->GPGCON |= (1<<12); // output
s2440IOP->GPGUP |= (1<<6); // pullup disable
s2440IOP->GPGDAT |= (1<<6); // GPG6 output High Level to enbale USB HOST
通过上面的代码来开启对USB HOST的供电,当然楼主的BSP包中后面的代码就要保证在执行上面代码之后不能改变GPG6的配置了,否则前面的控制代码将无效。
假如没有把GPG6输出为高电平:接入USB鼠标,那么USB鼠标的电源指示灯也会亮(如果是U盘,会一直亮,识别不到U盘),但是VBUS=3.4V左右。如果把GPG6输出为高电平:接入USB鼠标,那么USB鼠标的电源指示灯会亮(如果是U盘,会先闪烁,然后一直亮,可以正常识别U盘),VBUS=5V左右,这才是让USB鼠标正常工作的供电电压,楼主要确保这一点。
备注:上图是我们产品的设计,你们的产品对USB HOST的电路设计方式不一定一样,我只是为了把问题表达清楚而已,我的CPU是S3C2440