tomasgod 发表于 2022-8-16 20:34:32

求解惑,关于NOR FLASH超出地址范围的读写

自己画了个板子,MCU是103zet6,用的32Mbit的nor flash,64个扇区
下午测试硬件的时候,没注意就直接用这个例程,例程用的nor flsah是128个扇区
例程内容往第128个扇区读写,竟然也能读写出来正确的写入数据

起始地址是一样的,都是0x64000000,我想知道我这个往不存在的第128个扇区写的数据,存储在了哪一块的空间




eric2013 发表于 2022-8-17 11:26:03

这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。

tomasgod 发表于 2022-8-17 18:13:50

我今天改回4M字节的大小了,断电数据还是有的。至于超过范围的倒是没去试断电数据在不在,我明天试试看掉电后还能正常读取不,代码就直接拿硬汉哥你的程序就用了,改了下FSMC的对应区和引脚而已

tomasgod 发表于 2022-8-23 10:23:37

eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。

前几天隔离才出来,好家伙,忘光了,等我后续开发到这个地方再跟上:(

tomasgod 发表于 2022-8-23 10:27:41

eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。

隔离刚出来,已经忘光了,等我后续整到这个地方再更:(

eric2013 发表于 2022-8-24 02:32:55

tomasgod 发表于 2022-8-23 10:27
隔离刚出来,已经忘光了,等我后续整到这个地方再更

好的。

tomasgod 发表于 2022-10-19 11:04:39

eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。

断电测试了下,数据能正常保存的。。。。。

tomasgod 发表于 2022-10-19 11:05:36

eric2013 发表于 2022-8-17 11:26
这里有个关键的地方,重新上电后,对应的数据还正常吗,另外你的测试代码怎么写的。

断电测试了下,数据还是能正常保存读写的。。:funk:

tomasgod 发表于 2022-10-19 14:07:47

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]
查看完整版本: 求解惑,关于NOR FLASH超出地址范围的读写