硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4181|回复: 6
收起左侧

[有问必答] 关于nor Flash的页编程问题

[复制链接]

2

主题

6

回帖

12

积分

新手上路

积分
12
发表于 2020-4-17 11:35:01 | 显示全部楼层 |阅读模式
在驱动程序NOR_WriteInPage()函数中有这么一行代码:

_uiWriteAddr = _uiWriteAddr / 2;
除以2相当于右移一位,这是为啥呀?在半字编程函数里没有这一行呢?



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106886
QQ
发表于 2020-4-17 12:03:59 | 显示全部楼层
16位带宽的NOR Flash可以像SRAM那样,直接进行字节,半字和字的读取,无需做奇地址
http://www.armbbs.cn/forum.php?m ... 4087&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2020-4-17 13:10:55 | 显示全部楼层
eric2013 发表于 2020-4-17 12:03
16位带宽的NOR Flash可以像SRAM那样,直接进行字节,半字和字的读取,无需做奇地址
http://www.armbbs.cn/ ...

谢谢答复,不过我可能没表述清楚,我想问的是在页编程的时候给nor flash的地址是右移了一位的,这样的话地址不就变了吗?比如给想扇区1(0x10000)编程,右移一位以后地址不就是扇区0(0x08000)吗?而在字节或半字方式编程中都没有这一步操作,所以有点想不通。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106886
QQ
发表于 2020-4-17 14:14:41 | 显示全部楼层
店小二 发表于 2020-4-17 13:10
谢谢答复,不过我可能没表述清楚,我想问的是在页编程的时候给nor flash的地址是右移了一位的,这样的话 ...

早期的代码做的繁琐了,那个函数继续往下看就明白了

因为程序里面的NOR_WRITE没有做偏移,是通过ADDR_SHIFT做了一次。相对于就是全面做的右移就是没有变。

回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2020-4-17 18:32:14 | 显示全部楼层
eric2013 发表于 2020-4-17 14:14
早期的代码做的繁琐了,那个函数继续往下看就明白了

因为程序里面的NOR_WRITE没有做偏移,是通过ADDR_ ...

哦,我明白了,还有一点不明白的是为什么同样给norflash发送地址,有的需要左偏移一位,有的时候却不用呢?
比如:
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));
}
倒数第二行代码地址没有左移,貌似与命令对应的地址都需要左移一位
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106886
QQ
发表于 2020-4-17 19:03:36 | 显示全部楼层
店小二 发表于 2020-4-17 18:32
哦,我明白了,还有一点不明白的是为什么同样给norflash发送地址,有的需要左偏移一位,有的时候却不用呢 ...

命令有8bit和16bit两种,16bit命令记得要偏移下。

而数据地址要注意,务必2字节对齐,也就是也要16bit方式写入,否则会出问题。
这个详情就是我在二楼回复你的地址里面进行了说明

QQ截图20200417185947.png
而你楼主位的页编程问题,命令如下,特别注意红色方框里面的,8bit和16bit是一样的,无需偏移

QQ截图20200417191116.png


回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2020-4-17 21:03:15 | 显示全部楼层
eric2013 发表于 2020-4-17 19:03
命令有8bit和16bit两种,16bit命令记得要偏移下。

而数据地址要注意,务必2字节对齐,也就是也要16bit ...

OK,我明白了,谢谢硬汉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 08:50 , Processed in 0.293476 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表