阅读:1222回复:3
关于PIC+D12实现USB通讯的问题!?
PDIUSBD12不能枚举,读芯片ID的问题!?
大家好,我使用 D12与PIC做USB的通讯 ,采取自供电的方式。 上电后,检查Vout输出3.3V,CLKOUT输出4M(复位默认值)--我认为D12已经可以正常工作了。 但是D12不能枚举,读取D12的芯片ID时出现的问题很奇怪。 我先把最低层的2个函数列出如下: void outportb(unsigned char A0,unsigned char data) { TRISC=0x00; //make the RC output,when writing RB2=(A0==0x01)?1:0; //RB1 link to D12\'s A0,COMMAND=1,DATA=0 PORTC=data; //write D12 RB4=0b1; RB4=0b0; //link RB4 to D12\'s wr_n RB4=0b1; //wr_n ~_~ low length=1us@4Mhz } unsigned char inportb(unsigned char A0) { unsigned char data; TRISC=0xff; //make the RC input,when reading RB2=(A0==0x01)?1:0; //RB2 link to D12\'s A0 RB3=0b1; RB3=0b0; //link RB3 to D12\'s rd_n data=PORTC; //read D12 RB3=0b1; //rd_n ~_~ low length=1us@4Mhz return data; } 单步执行的时候,可以读出芯片ID(0x1012),全速运行时ID读错,D12枚举不成功。 我的观点总结出以下几条: 1. PIC与D12的数据接口(D0~D7,A0,WR,RD),连接上应该没有问题,不然单步不会读出正确的ID 2. 我觉得问题可能就出在底层读写的这两个函数上,可能是时序上安排不对,但是我已经根据D12手册上的时序去做的。 3. 硬件上,CS_N,SUSPEND,以及ALE都接地;EOT_N,DMACK_N和RESET_N分别通过一电阻接VCC。 希望朋友们能给在下看看,指点指点,指一条明路!万分感谢! 再下叩首。 |
|
|
沙发#
发布于:2005-02-24 20:53
顶,兄弟努力
|
|
|
板凳#
发布于:2005-02-25 11:05
从描述的来看,应该是读写的问题,D12要求2次连续的读写间隔至少是500ns,命令和数据之间更要求是600ns,会不会是你pic速度太快
造成的错误 |
|
地板#
发布于:2005-03-03 08:15
我来结下帖^_^
是写入时序不大对 应该是:先写数据,再设置a0,然后wr void outportb(unsigned char A0,unsigned char data) { TRISC=0x00; //make the RC output,when writing PORTC=data; //write D12 RB2=(A0==0x01)?1:0; //RB1 link to D12\'s A0,COMMAND=1,DATA=0 RB4=0b1; RB4=0b0; //link RB4 to D12\'s wr_n RB4=0b1; //wr_n ~_~ low length=1us@4Mhz } 谢谢大家!! |
|
|