求解惑,关于NOR FLASH超出地址范围的读写
自己画了个板子,MCU是103zet6,用的32Mbit的nor flash,64个扇区下午测试硬件的时候,没注意就直接用这个例程,例程用的nor flsah是128个扇区
例程内容往第128个扇区读写,竟然也能读写出来正确的写入数据
起始地址是一样的,都是0x64000000,我想知道我这个往不存在的第128个扇区写的数据,存储在了哪一块的空间
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。 我今天改回4M字节的大小了,断电数据还是有的。至于超过范围的倒是没去试断电数据在不在,我明天试试看掉电后还能正常读取不,代码就直接拿硬汉哥你的程序就用了,改了下FSMC的对应区和引脚而已 eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。
前几天隔离才出来,好家伙,忘光了,等我后续开发到这个地方再跟上:( eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。
隔离刚出来,已经忘光了,等我后续整到这个地方再更:( tomasgod 发表于 2022-8-23 10:27
隔离刚出来,已经忘光了,等我后续整到这个地方再更
好的。 eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。
断电测试了下,数据能正常保存的。。。。。 eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。
断电测试了下,数据还是能正常保存读写的。。:funk: eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。
#define NOR_FLASH_ADDR ((uint32_t)0x64000000)
#define ADDR_SHIFT(A) (NOR_FLASH_ADDR + (2 * (A)))
#define NOR_WRITE(Address, Data)(*(__IO uint16_t *)(Address) = (Data))
/*
*********************************************************************************************************
* 函 数 名: NOR_WriteHalfWord
* 功能说明: 半字编程. 编程前执行解锁命令序列。编程完毕后,自动退到读取模式。半字编程可以是随机地址。
* 编程前需要保证存储单元是全0xFF状态。可以重复编程相同的数据。
* 形 参: _uiWriteAddr : 偏移地址; 编程地址必须为偶数
* _usData : 数据 16Bit
*
* 返 回 值: NOR_SUCCESS, NOR_ERROR, NOR_TIMEOUT
*********************************************************************************************************
*/
uint8_t NOR_WriteHalfWord(uint32_t _uiWriteAddr, uint16_t _usData)
{
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00A0);
NOR_WRITE(NOR_FLASH_ADDR + _uiWriteAddr, _usData);
return (NOR_GetStatus(Program_Timeout));
}
硬汉哥,为啥这里第四个NOR_WRITE写入的地址不需要左移一位,既然是16位数据线,地址不应该都是左移一位么
页:
[1]