#1楼主:PIC+D12问题
文章发表于:2008-06-13 04:36
我把computer00的C51+D12的程序移植到dsPIC30F6014a上,可以正确的读ID,可以设置DMA,和读DMA,但是就是枚举不成功,请问有没有哪位高手试过!!!
#2
文章发表于:2008-06-13 19:18
可能是大小端结构问题。如果是非8位机,还存在着结构体对齐和填充问题。另外操作速度也有影响。
#3
文章发表于:2008-06-14 08:54
你好!这几个问题我考虑过,我用的是16位的,时序我考虑过,没什么问题,就是大小端,和结构问题了。因为我对结构对齐不是很了解,我用的编译器是也支持结构对齐的属性,__attribute((packed))__但是又说了:“器件要求按偶字节对齐”不是很明白。希望能指点指点!!!!
#4
文章发表于:2008-06-14 09:11
不好意思!,__attribute((packed))__写错了,应该是__attribute__((packed)) ;
#5
文章发表于:2008-06-14 23:00
结构中的每个变量定位在偶地址,
可反汇编,看一下结构中各变量的地址
#6
文章发表于:2008-06-15 10:14
可以考虑将结构体改成数组。
#7
文章发表于:2008-06-16 09:44
首先感谢各位大侠的建议!!
“结构中的每个变量定位在偶地址”??这句话怎么讲??用了__attribute__((packed)) 不就不是偶地址了吗??应该是按顺序排列的啊??
computer00的例子是怎么考虑的?我用的MCU是小端模式的,也是要求偶字节对齐的。
#8
文章发表于:2008-06-16 11:46
经过不懈的努力,我终于读到了, 80 06 00 01 00 00 40 00 GET DESCRIPTOR 谢谢各位的支持!加油!@
#9
文章发表于:2008-06-18 11:11
我的串口调试收到的数据
USB总线挂起.
读端点0's缓冲 8字节.
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00
Ack setup 0.
Ack setup 1.
清缓冲区.
USB标准输入请求.
获取描述符.
获取设备描述符.
Write endpoint1's buffer 16 bytes.
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x71 0x04 0x22 0x02 0x13 0x01 0x00 0x00
缓冲区有效
USB总线复位.
读端点0's缓冲 8字节.
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00
Ack setup 0.
Ack setup 1.
清缓冲区.
USB标准输入请求.
获取描述符.
获取设备描述符.
Write endpoint1's buffer 16 bytes.
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x71 0x04 0x22 0x02 0x13 0x01 0x00 0x00
缓冲区有效
USB总线复位.
读端点0's缓冲 8字节.
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00
Ack setup 0.
Ack setup 1.
清缓冲区.
USB标准输入请求.
获取描述符.
获取设备描述符.
Write endpoint1's buffer 16 bytes.
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x71 0x04 0x22 0x02 0x13 0x01 0x00 0x00
缓冲区有效
USB总线挂起.
怎么会这样???难道没发上去???还是时间太长??
#10
文章发表于:2008-06-18 12:29
继续加油调试...有可能是数据没有返回吧……不然的话,会收到设置地址的请求的……
#11
文章发表于:2008-06-19 11:49
谢谢00!今天又有进步了,
Device Phase Data Description Cmd.Phase.Ofs(rep) Delta
------ ----- ------------------------ ---------------- ------------------ -----
10.1 DI 04 . 1.1.0 22sc
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 2.1.0 28us
10.0 DI 00 01 03 00 .... 2.2.0 24us
10.0 CTL 23 01 11 00 02 00 00 00 CLEAR FEATURE 3.1.0 8us
10.1 DI 04 . 4.1.0 100ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 5.1.0(2) 18us
10.0 DI 00 01 01 00 .... 5.2.0 18us
10.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 7.1.0 95us
10.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 8.1.0 57us
10.0 DI 00 01 00 00 .... 8.2.0 12us
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.1.0 26us
10.0 DI 00 01 00 00 .... 9.2.0 11us
10.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 10.1.0 3.8ms
10.0 DI 00 01 00 00 .... 10.2.0 43us
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 11.1.0 35us
10.0 DI 00 01 00 00 .... 11.2.0 10us
10.1 DI 04 . 12.1.0 897ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 13.1.0(2) 53us
10.0 DI 01 01 01 00 .... 13.2.0 22us
10.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 15.1.0 354us
10.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 16.1.0 137us
10.0 DI 00 01 00 00 .... 16.2.0 11us
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 17.1.0(2) 26us
10.0 DI 01 01 00 00 .... 17.2.0 10us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 19.1.0 109ms
10.1 DI 04 . 20.1.0 90ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 21.1.0 25us
10.0 DI 03 01 10 00 .... 21.2.0 24us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 22.1.0 8us
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 23.1.0 19ms
10.0 DI 03 01 00 00 .... 23.2.0 14us
/////////////第一次获取设备描述符请求//////////////////////
10.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 24.1.0 160us
10.0 DI 12 01 10 01 00 00 00 10 ........ 24.2.0 140ms
71 04 22 02 13 01 00 00 q."..... 24.2.8
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 25.1.0 156us
10.0 DI 03 01 00 00 .... 25.2.0 28us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 26.1.0 29us
10.1 DI 04 . 27.1.0 39ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 28.1.0 27us
10.0 DI 03 01 10 00 .... 28.2.0 24us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 29.1.0 7us
////////////////设置地址,地址为2/////////////////////////////////
10.0 CTL 00 05 02 00 00 00 00 00 SET ADDRESS 30.1.0 19ms
/////////////第二次获取设备描述符请求//////////////////////////////
10.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 31.1.0 100ms
////////////第二次返回了全部的18字节设备描述符//////////////////
10.0 DI 12 01 10 01 00 00 00 10 ........ 31.2.0 194ms
71 04 22 02 13 01 00 00 q."..... 31.2.8
00 01 .. 31.2.16
10.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 32.1.0 702us
////////////返回9字节的配置描述符/////////////////////////////
10.0 DI 09 02 34 00 01 01 00 80 ..4..... 32.2.0 129ms
32 2 32.2.8
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 33.1.0 886ms
10.0 DI 03 01 00 00 .... 33.2.0 42us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 34.1.0 134us
10.1 DI 04 . 35.1.0 69ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 36.1.0 27us
10.0 DI 03 01 10 00 .... 36.2.0 25us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 37.1.0 9us
//////////再一次获取设备描述符//////////////////////////////
10.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 38.1.0 20ms
10.0 DI 12 01 10 01 00 00 00 10 ........ 38.2.0 140ms
71 04 22 02 13 01 00 00 q."..... 38.2.8
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 39.1.0 51us
10.0 DI 03 01 00 00 .... 39.2.0 27us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 40.1.0 44us
10.1 DI 04 . 41.1.0 39ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 42.1.0 28us
10.0 DI 03 01 10 00 .... 42.2.0 26us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 43.1.0 8us
10.0 CTL 00 05 02 00 00 00 00 00 SET ADDRESS 44.1.0 19ms
10.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 45.1.0 100ms
10.0 DI 12 01 10 01 00 00 00 10 ........ 45.2.0 194ms
71 04 22 02 13 01 00 00 q."..... 45.2.8
00 01 .. 45.2.16
10.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 46.1.0 942us
10.0 DI 09 02 34 00 01 01 00 80 ..4..... 46.2.0 129ms
32 2 46.2.8
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 47.1.0 887ms
10.0 DI 03 01 00 00 .... 47.2.0 39us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 48.1.0 31us
10.1 DI 04 . 49.1.0 70ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 50.1.0 27us
10.0 DI 03 01 10 00 .... 50.2.0 25us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 51.1.0 8us
10.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 52.1.0 20ms
10.0 DI 12 01 10 01 00 00 00 10 ........ 52.2.0 140ms
71 04 22 02 13 01 00 00 q."..... 52.2.8
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 53.1.0 147us
10.0 DI 03 01 00 00 .... 53.2.0 27us
10.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 54.1.0 96us
10.1 DI 04 . 55.1.0 38ms
10.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 56.1.0 25us
10.0 DI 03 01 10 00 .... 56.2.0 24us
10.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 57.1.0 8us
10.0 CTL 00 05 02 00 00 00 00 00 SET ADDRESS 58.1.0 19ms
10.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 59.1.0 100ms
10.0 DI 12 01 10 01 00 00 00 10 ........ 59.2.0 194ms
71 04 22 02 13 01 00 00 q."..... 59.2.8
00 01 .. 59.2.16
10.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 60.1.0 1.4ms
10.0 DI 09 02 34 00 01 01 00 80 ..4..... 60.2.0 128ms
32 2 60.2.8
10.0 CTL 23 01 01 00 02 00 00 00 CLEAR FEATURE 61.1.0 887ms
这是我在2000下看到的,0x34个字的描叙符?但是你的是0x20个也不对,我数了数应该是9+9+7+7+7+7=46个。看看我说的对不。基本上就是结构的问题了。我有用了packed属性。但是大小没变。我准备改成数组试试!!