在CH376DiskReadSec这个函数里面的中断返回值不等于USB_INT_DISK_READ,而0x00!请大家帮我分析下,谢谢
这个需要你重点检查下你的中断函数是否有问题,例如中断函数里面的超时时间是否足够。你是读取第一次的64个字节可以读取上来吗?
中断函数不使用超时而改为死等的方式试试。你读几个扇区?在扇区读这个函数中cnt值是多少?CMD0H_DISK_RD_GO这个命令监测下执行了几次?什么接口和376通讯的
cnt=1,只需要读1个扇区。8位并口方式通讯!CMD0H_DISK_RD_GO这条命令不一定吧,有时候能执行很多次,ERR能到2. 其中一种情况:当err=0,我在中断返回值处设置断点,第一次返回0x1d,第二次返回0xff,继续执行能mBlockCount == 0,但此处的中断返回为0x1d,而不是0x14. 不知道您清楚我的意思没
我已经更改为死等中断了!在第一次读取64字节的时候,都不能读出来!cnt=1,八次数据中断有时候返回0x1d,有时候0x00,有时候0xff。但当有时候执行到,操作成功处的中断返回时,一直都是0x1d.而不是0x14
我已经修改过来了,能读取返回0x14成功,但现在的问题变成了,成功读取1个扇区后,FileDataBuf数组里面没有数据???
文件不足一个扇区的内容是读不出来的,需要零时加大文件长度。打开文件后可以这样做: NewSize = CH376GetFileSize( ); NewSize +=512; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); CH376SecRead( FileDataBuf, 1, NULL ); 读完后再把文件长度改为原先的长度,方法同上
好,非常感谢!我去试试
您好!我实验了,结果: 1:当我文件大小为10bytes时,即sh1 = 10; NewSize = sh1; NewSize += 512; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); s = CH376SecRead( FileDataBuf, 1, NULL ); Nop(); NewSize = sh1; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); Nop( ); 运行完成之后,FileDataBuf里仍无数据!不知道为什么?
2:当文件大小为13824bytes时,超过了1扇区,为27扇区! 直接调用s = CH376SecRead( FileDataBuf, 27, NULL ); 对吗?谢谢
你单片机有27个扇区大小的缓冲区吗?你先读取一个扇区测试下看函数返回0X14的话,那么需要看下FileDataBuf这个缓冲区里面的数据。什么叫里面无数据?是全0XFF还是全0X00。
没有那么大呢!我改成一次1个扇区吧! 是测试的一个扇区,返回0x14,然后在watch里观察的FileDataBuf里数据,全部都是0x00!!! 我文件里面内容为0123456789
文件大小为13824bytes时,你读一个扇区看下CH376ReadBlock这个函数执行几次,也就是说看下函数的0x14从哪边返回的