376字节写,每次只能写512字节,也就是说每次写入的字节数的整数倍是512才能保证不出错,在字节写的时候有没有查询扇区剩余字节数的命令,每次只有发送开始写(2D)命令,才会返回可写的字节数啊,比如说,每次写入128字节的话,理论上是没问题的,但是如果中间某次数据出错,出现了错位的话,那么每到512字节都会出错啊,如果在每次写之前先判断扇区剩余量的话,就可以避免某个数据错位而造成后面的连串错误,那么怎么才能查询扇区剩余量呢?
首先我们没有查询扇区剩余字节数的命令,字节写的话一次可以写是0~65536字节数据。每次发送0x2D向内部指定缓冲区写入请求的数据块。比如你每次写120个字节,前四次返回长度120,第五次返回32,第六次返回88之后如此循环,这样的话如果某次数据出错,不会造成连串错误。
那么如果每次以128字节的方式写入,发送0x3c加128字节数的话,是不是这时候如果发的数据多余128字节,超出的部分自动丢弃,再发0x3D命令,返回14,如果实际发的数据少于128字节的话,再发0x3D命令,一直返回0x1e? 如果是这样的话,只要保证每次发的命令写字节数正确,就可以保证一次数据错位不影响后面的错位,是不是这样?
不是啊!比如你发0x3c加128字节数,第一次发2D返回128再发3D返回1e,继续发2D返回0x3c,再发3D返回不是1e跳出循环。它是分次写的,不会影响下一次。
你好,我在请问一下,如果我每次以128字节的方式写,前3帧数都正常写入,第4帧数据发了129个字节,还会返回1E吗?这时候已经到了512字节的扇区边界啊,也就是说,扇区剩余空间只剩128字节了,而我们发了129字节数据,返回的将是什么?
你这种情况第四帧以128字节写入,返回1E。接着第五帧写1字节,返回14。