CH375字节读写问题及其它

1. 我使用CH375的字节模式进行写U盘,如果我循环写,每次写入32字节,循环16次,一共是512字节,正好是一个扇区,在字节模式下,CH375ByteWrite库函数是不是要对该扇区擦除16次? 重写了16次?(当然会结合使用DISK_BASE_BUF)

2. 为什么没有提供类似C语言标准库的流式文件IO? 字节模式容易写坏U盘(不能加个512字节的扇区buffer吗?),扇区模式太难用了。

3. 看例子里有查询U盘插入的两种方式,有什么区别?

1)while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt();

2) while ( CH375DiskStatus < DISK_CONNECT ) { if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; }

4.在编写xWriteCH375Cmd 等外部函数时,按说明前后延时大于4us就可以,结果我延时20us,在调用CH375FileOpen时死掉,改成4us左右才行,为什么?

5.模拟并口方式与375通信,对CPU的速度有要求吗?我用C8051F410,在1.5M时钟以下不能工作,在调用CH375FileOpen时死掉,在3M以上正常 ,为什么?

能不能发我邮箱一份你的代码?个人信息保护,已隐藏


是这样的,如果你操作一个扇区,往一个扇区里以字节的形式去写16次的话,这个扇区就被写了16次,底层写是按扇区写的.扇区先被读出在写入. 扇区和字节一样,不知道您所的难用是指在那些地方难用.你可以定义512个字节的缓冲区,这样就一次写1个扇区.是可以更改的. 我们DATASHEET里面所说的延时是说这个时顺可以正常操作375,但是由于U盘本身的特性,如果操作延时过长可能会导致挂起睡眠等现象.


楼上,你应该用过C语言标准库函数数吧(fread,fwrite),不需要考虑扇区就可以很好工作,而又不会像字节模式那样重复写同一个扇区,windows api用起来也是一样(ReadFile,WriteFile),当然PC机有比较大的内存也是一个原因,不过我想用两个512字节的ram,一个作为扇区buf,另一个作为文件buf应该可以做到C标准库的功能吧,包括自动更新文件长度。你们的库函数(扇区模式)连文件长度都要自己算用modify来改(EXAM8),Locate竟然也是以扇区为单位,而且还不包括最后一个扇区的零碎数据,还要修改CH375vFileSize欺骗一下,也太麻烦了吧。

(注,所有问题都在4个不同品牌的U盘和读卡器下有相同表现)

应该不存在睡眠问题,20us不会使U盘进入睡眠模式,现象是死机死在调用xQueryInterrupt时查询int#管脚上,此时该管脚电平恒为高电平,所以出现死等,不过之前调用GetDiskSize是正常通过的,容量也对。到调用FILEOPEN就死了(EXAM7)。

其它几个在楼主位的问题还请wch的技术人员回答一下。问题都是用EXAM7出现的(只修改了延时和必要的sbit)


WCH的技术支持呢,好几天了都不回答!


楼主位的 问题3 和问题5 请wch回答一下。


问题3:这2个函数在本质上面没有任何的区别,只是下面的一个函数是做到了库里面,用来判断设备是否插上,而前面一个函数是在头文件里面定义的,你可以自己去修改这个函数。 问题5:这个并不是我们的子程序库的问题,而是U盘本身的问题,因为当速度过慢的话,在操作的时候可能U盘已经挂起了,所以U盘对你发下去的命令是没有响应的,但是如果速度快的话就不会出现挂起的现象。


谢谢hcn的回答,不过你们的文件库函数写的真是不好用,我正在重新包装,否则编程太难受了。


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