SPI中关于扇区的地址疑问,数据手册好像也没有相关的操作。。。。

2019-07-21 03:43发布

//擦除一个扇区 //Dst_Addr:扇区地址 0~511 for w25x16 //擦除一个山区的最少时间:150ms void SPI_Flash_Erase_Sector(u32 Dst_Addr)    {        Dst_Addr*=4096;     SPI_FLASH_Write_Enable();                  //SET WEL       SPI_Flash_Wait_Busy();        SPI_FLASH_CS=0;                            //使能器件        SPI2_ReadWriteByte(W25X_SectorErase);      //发送扇区擦除指令      SPI2_ReadWriteByte((u8)((Dst_Addr)>>16));  //发送24bit地址         SPI2_ReadWriteByte((u8)((Dst_Addr)>>8));        SPI2_ReadWriteByte((u8)Dst_Addr);       SPI_FLASH_CS=1;                            //取消片选               SPI_Flash_Wait_Busy();     //等待擦除完成 } 
不明白上面代码的红 {MOD}部分,为什么扇区的地址是0-511的??如何理解,或者有什么资料可以加强对flash的理解的。。谢谢、、、
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
STM32初学菜鸟
2019-07-21 16:29
回复【4楼】正点原子:
---------------------------------
W25Q64:一共是8M字节=8*1024*1024=8388608(Byte),分为128块(64K),每一块有分为16个扇区(4K),所以扇区的个数是:128*16=2048(个),那么上面函数的参数Dst_Addr的范围就是0-2047,假如要擦除第1000个的扇区,那么这个扇区的字节起始就是1000*4096=4096000,因此把4096000先发送最高8位,次高8位,再到最低8位,然后W25Q64就从4096000开始往下擦除4K大小的数据空间,计算地址的时候是使用字节来计算的,是怎样理解的吗?原子哥。。。。

一周热门 更多>