阅读:1268回复:3
修改firmware后找不到USB驱动了!
我用CYPRESS的ez-usb fx2开发板做一个项目,随板子附带有几个例子,其中有一个是测试bulk传输的,用过fx2的都应该知道安装完开发包后在Cypress\USB\Examples\FX2有一个bulkloop例子,我这个例子的firmware部分跟这个bulkloop完全一样,只是多了一个PC端的application方便测试。
在原firmware中2,4,6,8四个endpoint都用到了,2,4作为out endpoint,6,8作为 in endpoint,然后2和6,4和8互相传递数据。 现在我想只用2和6,我在TD_init()中作了如下修改: SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA0;//原来为 0xA2; SYNCDELAY; EP4CFG = 0x20;//原来为 0xA0; SYNCDELAY; EP6CFG = 0xE0;//原来为 0xE2; SYNCDELAY; EP8CFG = 0x60;//原来为 0xE0; 在TD_poll()中我注销掉了4和8作交换的代码: /*if(!(EP2468STAT & bmEP4EMPTY)) { // check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty if(!(EP2468STAT & bmEP8FULL)) { // check EP8 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full APTR1H = MSB( &EP4FIFOBUF ); APTR1L = LSB( &EP4FIFOBUF ); AUTOPTRH2 = MSB( &EP8FIFOBUF ); AUTOPTRL2 = LSB( &EP8FIFOBUF ); count = (EP4BCH << 8) + EP4BCL; // loop EP4OUT buffer data to EP8IN for( i = 0x0000; i < count; i++ ) { // setup to transfer EP4OUT buffer to EP8IN buffer using AUTOPOINTER(s) EXTAUTODAT2 = EXTAUTODAT1; } EP8BCH = EP4BCH; SYNCDELAY; EP8BCL = EP4BCL; // arm EP8IN SYNCDELAY; EP4BCL = 0x80; // re(arm) EP4OUT } }*/ 剩下的我就只改动了dscr.a51:将number of endpoint由4改为2,并注销掉了4和8的endpoint descriptor 这就是所有的改动,但是编译后刷到板子上就找不到驱动了,我实在想不到还要修改那里,或是改的不对,还请高人指教! |
|
|
沙发#
发布于:2007-02-06 20:25
你可以试试
EP2CFG=0x21;具体你可以看手册,那个1是invalid的意思 还有既然你不用端点4、8,那你就该不能对4、8端点的寄存器进行访问,包括设置。 |
|
板凳#
发布于:2007-02-06 16:46
可我已经关掉了阿:EP4CFG = 0x20;//原来为 0xA0; EP8CFG = 0x60;//原来为 0xE0;
并且dscr.a51中也删除了4和8的描述 |
|
|
地板#
发布于:2007-02-06 15:02
没有用的端点必须关掉
|
|