理解错误,DATA_BUFFER是你单片机的缓冲区,CH375怎么会 写你的单片机缓冲区呢? CH375完全是MCU控制的。你把DATA_BUFFER数据送给375,375就把数据送给U盘了。 DATA_BUFFER为512字节的缓冲区(至少512,或者512整数倍),缓冲区满后,调用mWriteSector,CH375就吧数据写到U盘的扇区里面了。然后你在继续采集,继续写就是了,扇区地址:上次写1号扇区,这次写2号扇区。。。。。。。
哦,我好像明白点了,谢谢了。
再请教个问题,我现在写512个字节的数到U盘里,执行到mWriteSector写操作的时候,返回0x1F,说明操作失败,我用串口监视到原因是写数据块的时候只写了2个就停止了,本来应该是mBlockCount=512/64=8,所以应该写8个数据块,想问下为什么会写操作中途失败呢?原因大概出在哪里啊?
U盘的容量有没有获取到?前面的初始化部分呢?
前面的初始化正确返回0,我用串口看了一下返回的DATA_BUFFER[6],是0x02,根据说明是表示每扇区512字节,具体的容量我没算
我换了个U盘试了试,还是不行啊,初始化是正确的。不知道原因出在哪了?
是不是我没检查这个 CH375DiskReady的原因啊?我参考的CH375EVT\PUB\MCS51C\MISCELL\CH375EV0.C里的程序,应为里面说大多数U盘不用检查 CH375DiskReady,而且可以省代码,我就没写这一步,这会不会是原因所在啊?
关于U盘容量你还是要好好看一下是否真正获取到了,因为只有获取到U盘容量的时候,U盘才算真正的可以操作了。 应该不是 CH375DiskReady的问题。 移植程序的时候,流程上按照我们提供的代码去做。另外需要注意延时函数根据你的MCU以及主频进行修改。 你可以把你的代码发给我看看
好的,我先获取下容量试试,一会还是不行我把程序发给你。
我获取了容量,是正确的,下面是我的数: DATA_BUFFER[0]=0x00,DATA_BUFFER[1]=0xF0,DATA_BUFFER[2]=0xA8,DATA_BUFFER[3]=0x47, DATA_BUFFER[4]=0x00,DATA_BUFFER[5]=0x00,DATA_BUFFER[6]=0x12,DATA_BUFFER[7]=0x00. 参照命令DISK_SIZE的说明计算的话,总共是15771719个扇区,每扇区512字节,所以磁盘容量是7.52G,跟我在电脑上查看的该U盘容量是一样的。
别的还会是什么原因呢?帮我想想办法吧,
你测试一下读扇区,看结果如何,另外把代码发给我。
好的,我发你邮箱
unsigned char wait_interrupt(void) { unsigned short i; for(i=0;(PIND&0x04)==0x04;i++) /*如果INT为高电平则等待,通过计数防止超时 */ { delay_us(2); if(i=0xF000) xWriteCH375Cmd(0x17);/*如果超时达61ms以上则强行终止NAK重试*/ } if((PIND&0x04)==0) /*如果INT为低电平*/ return(GET_STATUS( )); /* 产生操作完成中断, 获取中断状态 */ else return(0); } 下面的语句错误,请修改 if(i=0xF000) xWriteCH375Cmd(0x17);/*如果超时达61ms以上则强行终止NAK重试*/ 为: if(i==0xF000) xWriteCH375Cmd(0x17);/*如果超时达61ms以上则强行终止NAK重试*/ 或者直接屏蔽掉,无限重试
真是谢谢你了,我按你说的改了,返回正确了,读写都正确,我编程太不严谨了,赋值和等于都没写对,以后长教训了。