IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 嵌入式linux学习笔记 1-15 Nor FLash原理即硬件操作 -> 正文阅读

[系统运维]嵌入式linux学习笔记 1-15 Nor FLash原理即硬件操作

目录

1. NorFlash与NandFlash的特点

2. 使用U-boot体验Nor Flash操作

2.1 读数据

2.2 读ID

?2.3 Nor Flash的两种规范,jedec, cfi(common flash interface)

2.4 NorFlash写数据


1. NorFlash与NandFlash的特点

Nor FlashNand Flash
接口RAM-like,引脚少,复用,数据线上传输命令、地址、数据
容量
简单,像内存一样读复杂
发出特定命令(慢)

发出特定指令(快)

价格贵(无位反转,坏块)便宜(但是会位反转有坏块)

XIP

(execute in place)

在芯片上直接运行

可以不可以

因此根据他们的这些特点,当为了系统的稳定,一些关键性的程序,如BIOS,bootloader会存储在Nor Flash中;NandFlash会存储一些海量数据,如视频监控等。

2. 使用U-boot体验Nor Flash操作

2.1 读数据

????????使用“md.b +地址 +指令”指令来读取数据。如下图所示,读取0地址的数据,实际与我们烧写的U-boot.bin中的二进制数据一致。

2.2 读ID

??????? 如下表所示,往555H写AAH,往2AAH写55H,往555H写90H(这段操作称为解锁),最后读0地址得到厂家ID,读1地址得到设备ID。

?需要注意的是,查看电路图可以看到,我们的Norflash是16位的,因此地址线并不是一一对应的, 是2440的A1接norflash的A0,也就是2440的A0没有接到norflash。因此2440需要发出(555H<<1), NOR才能收到555H这个地址。所以实际是往AAAH地址写AAH,往554H写55H,往AAAH写90H,最后读的地址也要左移1位。

??????? 写数据的指令为“mw.w + 地址 + 指令”。eg. mw.w aaa aa

??????? 输入以下指令。

?

?2.3 Nor Flash的两种规范,jedec, cfi(common flash interface)

????????一种是 jedec 探测,就是在内核里面事先定义一个数组,该数组里面放有不同厂家各个芯片的一些参数,探测的时候将 flash 的 ID 和数组里面的 ID 一一比较,如果发现相同的,就使用该数组的参数。jedec 探测的优点就是简单,缺点是如果内核要支持的 flash 种类很多,这个数组就会很庞大。内核里面用 jedec 探测一个芯片时,是先通过发命令来获取 flash 的 ID,然后和数组比较,但是 flash.c 中连 ID 都是自己通过宏配置的。

????????一种是 CFI(common flash interface)探测,就是直接发各种命令来读取芯片的信息,比如 ID、容量等,芯片本身就包含了电压有多大,容量有有多少等信息。

Nor Flash上操作cfi2440上操作cfiU-BOOT上操作cfi
往55H地址写入98H往AAH地址写入98Hmw.w aa 98
读地址10H得到0051读地址20H得到0051md.w 20 1
读地址11H得到0052读地址22H得到0052md.w 22 1
读地址12H得到0059读地址24H得到0059md.w 24 1
读地址27H得到容量读地址4EH得到容量md.w 4e 1

在任意地址写入F0H

(退出CFI模式,实则

就是reset)

在任意地址写入F0Hmw.w 0 fo

注:若进入cfi模式但是不退出的话,会影响之后芯片对指令的响应。所以一定要记得退出cfi模式,也就是reset。

2.4 NorFlash写数据

??????? 之前介绍NorFlash并不能随意写。根据手册,norflash也要经过解锁以后才能往地址写入数据, 而且解锁之前还需要擦除地址上的数据才能写入成功

??????? 先擦除
??????? 往地址555H写AAH
????????往地址2AAH写55H
????????往地址555H写80H
??????? 往地址555H写AAH
????????往地址2AAH写55H
??????? 往地址PA(program address)写30H

??????? 再烧写
??????? 往地址555H写AAH
????????往地址2AAH写55H
????????往地址555H写A0H
????????往地址PA(program address)写PD(program data)

?????????2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
UBOOT怎么操作?

????????

???????往地址AAAH写AAH?????????????????mw.w aaa aa
?????? 往地址554H写55H?????????? ????????mw.w 554 55
???????往地址AAAH写80H????????? ????????mw.w aaa 80

????????往地址AAAH写AAH??????? ????????mw.w aaa aa
????????往地址554H写55H????????????????? mw.w 554 55
????????往地址0x100000写30h?????????? mw.w 100000 30

????????往地址AAAH写AAH?????????????? mw.w aaa aa
????????往地址554H写55H?????????????? mw.w 554 55
????????往地址AAAH写A0H?????????????? mw.w aaa a0
????????往地址0x100000写1234h???????? mw.w 100000 1234

????????

3.硬件知识

??????? 一个NorFlash含有1个或多个region,一个region内含有一个或多个block(扇区)。如下图所示,通过访问0x2C地址可以看到共有4个扇区。

???????? 关于扇区内的信息内容,表中提示我们要按照CFI pubulication 100来理解,以下截自CFI pubulication 100,来源:https://wenku.baidu.com/view/cd1c1e22482fb4daa58d4b42.html

??????? 规则是低两字节加一代表扇区的个数,高两字节乘256代表扇区的大小。

4. 编程中注意事项

1. 编译程序时加上: -march=armv4
?? 否则
?? volatile unsigned short *p = xxx;
?? *p = val; // 会被拆分成2个strb操作

2. 把timer中断去掉
?? 否则: 测试nor时进入CFI等模式时, 如果发生了中断,cpu必定读NOR,
?? 那么读不到正确的指令,导致程序崩溃。

3. 关于地址

??????? 由于位宽的不同,NorFlash是16Bit的,所以地址总线的A1接的是NorFlash的A0。因此当我们要写NorFlash上的某些位的时候是,是从NorFlash的角度出发的,比如要修改Norflash上555的值,时间是CPU是要写1110的值,才能实现,所以每次要改Norflash的值都要人为地将地址<<1。但是如果是本来要改的值就是CPU地址上的值,那就只是按正常的来就可以了,比如要修改CPU
1000地址的值,实际上就存在NorFlash的500地址里,不需要人为地移位。

?

4. 判断NorFlash是否擦写完毕

????????查MX29LV800BT/BB datasheet第16页可知:

?

?

功能说明:用户可以通过查询第I位切换指示是否有自动程序或擦除算法正在进行或完成。
使用方法:执行擦除命令后,通过先后两次读取操作地址的第I位,判断两次的电平是否相同,若相同则命令执行完毕,否则命令未执行完毕。
?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:52:26  更:2021-08-22 13:55:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:47:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码