usb device移植遇到的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WY_stutdy/article/details/78911608
1、加载usb device驱动模块和zero模块, 将板子的micro-usb口,用usb线连接到PC机上,PC机无反应,不进行设备的枚举过程
原因:1)板子的PHY和时钟没初始化好
2)板子的usb device模块的硬件有问题
注意: 如果是外部时钟没初始化好,可能会造成寄存器读写不了,一读写就程序崩溃


2、中断中调用malloc申请内存,导致系统崩溃
原 因: malloc中有信号pend函数,有等待过程
解决方法: 使用中断线程加二进制通知信号量处理, 中断线程需要死循环


3、中断线程删除时,导致的程序崩溃问题
原 因: 线程没完全退出,线程中有资源没释放
解决方法: 在代码中,定义一个全局变量,并赋值为0,在删除该线程之前,先将全局变量赋值为1,然后post一个信号量(中断线程中,在死循环里首先判断改全局变量是否为1,若为1就break退出死循环),最后将中断线程合并(API_ThreadJoin)


4、枚举时,数据出错
原 因: 上层分配的是带有cache的堆内存,传输到底层进行DMA传输,出现cache不命中
解决方法:在对两者的操作时,增加cache的回写和无效机制
DMA_TO_DEVICE : API_CacheFlush使指定页面回写
DMA_FROM_DEVICE:API_CacheInvalidate使指定的页面无效(访问不命中)

猜你喜欢

转载自blog.csdn.net/WY_stutdy/article/details/78911608
usb