之前遇到问题,网上有人说flash最小擦除单位是块大小,有人说最小擦除单位是扇区大小…
某flash块大小64k,扇区大小4k,但是你的分区有的才8k,如果擦除flash必须是块大小的整数倍,那别想对这么小的分区进行正确的操作了。
flash的芯片手册,明确说明了块和扇区都是可以被独立擦除的。当然,手册没说明支持的话就不用徒劳了。
• 2048 Equal Sectors with 4K byte each - Any Sector can be erased individually
• 128 Equal Blocks with 64K byte each - Any Block can be erased individually
在这前提下,若实际操作中发现sf erase 0x00 0xn 只能擦除块,那原因基本就是flash支持扇区擦除,但是产品集成商没提供方法。实际上块擦除和扇区擦除只不过一个命令的差别而已。
从cmd_sf.c 一层层剥茧抽丝,会找到一个结构体数组,uboot就是从这个数组成员中找到属于自己的flash并匹配,获取相关信息。如海思的 struct spi_info hisfc350_spi_info_table [ ] = { … }; 找到你的flash型号,直接修改erasesize就可以了。erasesize直接决定了sf erase命令是支持块擦除还是扇区擦除。如果erasesize=64k,但是你sf erase 0x00 0x1000,明显是会报错的。
python&C语言QQ技术群:731202520
欢迎来交流技术问题~