1. 问题
通常在Linux系统上需使用dd命令读写flash设备,个人最近调试了一款spi-nor flash芯片,分区分配了8MB大小的分区,是用dd命令验证读写flash时,出现校验失败。
使用如下命令读写8KB数据就会出现校验数据失败
time dd if=/dev/urandom of=test.bin bs=8k count=1
flashcp -v test.bin /dev/mtd7
但使用如下命令测试8MB校验数据确没有问题
time dd if=/dev/urandom of=test.bin bs=4k count=2048
flashcp -v test.bin /dev/mtd7
通过了解dd命令,发现是bs参数的问题,bs表示flash的块大小,单位为字节
不同的flash块大小有可能不一样,但必须满足扇区的整倍数(个人使用的spi-not flash的扇区大小为4KB,块大小可以是32KB/64KB),dd命令读写flash必须的块大小至少是扇区的整数倍,因为系统是按照扇区大小为单位进行操作的。
纠正:产生问题的原因是读写flash之前没有先试用命令进行擦除导致的
flash_erase /dev/mtd7 0 0