CH375V DISK_INIT初始化命令失败

char Write_Ord(char i) { int dat; int j; j = 0; if(i != 0x22) { while((IO0PIN&USB_INT)==0) { j++; if(j>300000) return 1; } }

LoopNop(USBdelay); //延时3us IO1SET = USB_A0; Loop(USBdelay);

IO0DIR = IO0DIR|0x0003fc00; Loop(5); //延时150ns dat = i<<10; Loop(5); IO0CLR = 0x0003fc00; Loop(5); IO0SET = dat&0x0003fc00; Loop(5); IO1CLR = DATA_WR; Loop(10); IO1SET = DATA_WR; Loop(5); IO0DIR = IO0DIR&(~0x0003fc00); Loop(5); if(i!=0x22) LoopNop(USBdelay); return 0; }

char ReadUSBData(void) { char i; LoopNop(USBdelay); IO1CLR = USB_A0; IO1CLR = DATA_RD; Loop(10); IO1SET = DATA_RD; i = ( IO0PIN >> 10 ) & 0xff; LoopNop(USBdelay); return i; }

void WriteUSBData(char i) { int dat; LoopNop(USBdelay); IO0DIR = IO0DIR|0x0003fc00; Loop(5); dat = i<<10; Loop(5); IO0CLR = 0x0003fc00; Loop(5); IO0SET = dat&0x0003fc00; Loop(5); IO1CLR = USB_A0; Loop(5); IO1CLR = DATA_WR; Loop(10); IO1SET = DATA_WR; Loop(5); IO0DIR = IO0DIR&(~0x0003fc00); LoopNop(USBdelay);

}


if(i != 0x22) { while((IO0PIN&USB_INT)==0) { j++; if(j>300000) return 1; } } 上面的这段函数是什么意思?还有就是你用模拟I/O口的时候要注意时序,写数据的时候: write_cmd{ 设置I/O方向; 将数据送到数据口 A0=1; WR=0;CS=0; 延时100NS WR=1;CS=1; A0=0; } 写数据 write_dat{ 延时1US 设置I/O方向 将数据送到数据口 A0=0; CS=0;WR=0; 延时100NS; CS=1;WR=1; } 读数据 read_dat{ 延时1US 并口I/O方向设为输入; a0=0;RD=0;cs=0; 延时100NS; 从并口输入数据 CS=1;RD=1 }


读状态后INT为低,我就在发命令这前判断INT的状态,为低的话就返回一个错误,以便观察。奇怪的是有时正常,有时不行。 谢谢你的帮助,我先按照你的方法试试看。


hcn,谢谢你的指点。问题已经解决,375芯片有问题,换了一个搞定。


只有登录才能回复,可以选择微信账号登录