调试了两天的flash,测试应该是没问题的了。在调试中发现,1、擦除的是时候最小是4k擦除,擦除是擦除我们给的地址所在的4k空间;2、写入数据时,如果地址在4k空间的尾部时,当写入长度跨过了4k空间,到了下一个4k的空间时,写数据不成功(读出来不正确),刚刚想到也有可能是我的下一个4k空间没有擦除,导致我写入数据不正确;3、当我读数据读到当前4k空间的尾部时,如果要读取的长度超出到了下一空间,读出来的数据仍然是正确的。有三个结论:擦除时,擦除我们给的地址所在的4k空间(用4k擦除命令);写数据时,地址过到下一个4k空间时,数据不能正常写入(需要再次验证);读数据时,地址过到下一个4k空间时,数据能正常读出。
W25Q32BV是一款挺强大的flash,我只是弄了最简单的一种读取方式。搜索的时候发现没什么相关代码,我弄好了,就让我分享一下我自己的,让大家见笑了。有不对之处请大家海涵并指出。
下面是代码,我用的板子是AM824,硬件SPI。
/**
* flash检查是否能接收命令,并等待到能接收为止
*/
void check()
{
uint8_t temp;
do {
flash_cs(0);
spi_sent_byte(AMHW_LPC82X_SPI0, 0x05);
temp = spi_sent_byte(AMHW_LPC82X_SP