CH376S的写入问题

用CH376S对U盘进行读写 有一个命令想咨询一下:

CMD_BYTE_WRITE ( 0x3C )

以字节为单位向文件写入。该命令执行后是将数据直接写入到U盘中吗?也就是问,如果多次使用该命令来进行小批量数据存储是否会大大缩短U盘使用寿命?(就如同CH375的字节写入)

不是直接写进去,只要你每次写的数据量不超过一个扇区的话,我们都可能会一次写下去,例如你按照字节方式一次下30个字节,那么你写30个字节下去,但是真正写U盘的扇区的可能之后一个扇区或者二个扇区(跨扇区问题)。而不是写一个扇区写了30次。


也就是说数据量如果不超过1扇区,真正写入U盘只有1次(跨扇区的话2次),无论调用CMD_BYTE_WRITE多少次? 依次类推,不超过2扇区的话,最多写2次?


发生CMD_BYTE_WRITE命令,后面跟两个字节的数据长度,然后等待中断,并且回读CH376允许你写入的字节数,如果该字节数小于你要写的数据长度,则发送CMD_BYTE_WR_GO命令继续写入后续数据,依次循环,直到把所有的数据都写完为止。最好先参考我们提供的例程,然后在字节写。


程序已经参考了贵司提供的例程,并且功能已经能够实现。主要是担心用CMD_BYTE_WRITE会反复写入影响U盘寿命


反复的写 只要不频繁的更新文件长度,以及单次写入的数据量最好是扇区的整数倍,基本对U盘的寿命没什么影响,因为U盘底层是按照扇区方式擦写,比如一个U盘的扇区是512,一次写一个字节,那么该扇区可能要擦写512次,如果一次写256字节,那么该扇区可能就擦写两次就够了。


哦,明白 其实字节写入命令是写入CH376内部缓冲区中,FileClose的时候才真正操作U盘,对吗?


不是的,FileClose是更新文件长度。 因为你写数据的时候,CH376会把数据写给U盘,但是写数据,并不是对U盘固定地方写数据,所以问题不大,但是关闭文件,更新文件长度是对固定位置写的。所以影响对寿命的影响更大。 原则: 一次尽可能多的对扇区读写。尽量少的更新文件长度。


红桃六上面说的我都理解

或者这样问吧,要向一个新文件写入30个字节数据,如果分30次调用CMD_BYTE_WRITE命令,每次写入1个字节,最后调用一次FileClose来更新文件长度。对于保存30个字节数据的那个扇区写了多少次?


你还是没理解。 数据CH376是不缓存的。你说的是写30次。这是数据。


按照8楼所描述的话,那么不考虑跨扇区的话,那么,这个扇区被写了30次,调用FileClose来更新的话,只是更新了目录项。关闭文件和写文件对于U盘来说是更新不同的扇区的数据的。楼上所提的这个问题对于解释U盘使用寿命的话,不能按照楼上说的一次写一个扇区,那么来计算U盘的寿命。 U盘的寿命涉及到: 1,目录项的更新次数,重复不断更新目录项的话,会减少目录项的这个扇区的寿命。 2,FAT表的寿命,每次不断的写数据,更新文件长度,会减少FAT表的寿命。 3,写扇区的命令,例如每次写一个字节,那么,这个扇区的寿命就可能减少512。 当然,上面所说的只是简单的计算,实际上比这个复杂,因为还涉及到U盘FLASH的块擦除,FLASH的块的寿命等等诸多因数。上面的解释也是仅供一种理解参考吧。


其实,这里并不是要严格计算U盘的使用寿命。所谓的使用寿命是针对于相同条件下字节写入和扇区写入两种方式的比较。

我有一批数据要保存到U盘里(数据量为几K到几十K)。如果用字节写入方式的话(每次写入几个或者几十个字节),程序比较方便而且使用的RAM会相对较少,但是担心用字节方式写入的话会多次进行扇区擦写,相对于扇区写入的话会增加扇区擦写次数,进而影响U盘使用寿命。

现在看下来,还是要在用户程序里开出一块缓冲区,数据集中到一个扇区大小后再写入,这样比每次写十几个字节要减少些擦写次数。


是这样的,不要写的过于频繁。U盘的NAND FLASH管理和U盘控制芯片有关系,至于里面采用什么样的算法去管理块,每个厂家不一样。如果写字节写的过于频繁的话建议您还是缓冲成数据块,批量写下去。


那么,再问一下,一次写是指从调用CMD_BYTE_WRITE开始,到发送FileClose命令结束,就算一次写完成对吗?还是从哪到哪算一次完整的写,再写要从CMD_BYTE_WRITE开始对吗?


在调用一次CMD_BYTE_WRITE到你把数据写完,关闭文件只是更新目录项而已。


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