我是靠谱客的博主 能干小熊猫,最近开发中收集的这篇文章主要介绍【U-Boot && Linux命令】:【内存操作md、mw】、【nand flash操作】一、U-Boot 内存 & flash操作指令二、Linux读写寄存器命令:devem,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、U-Boot 内存 & flash操作指令
    • 1、内存操作指令
      • 1.1. md:读内存(memery display)
        • 格式:
        • 参数释义:
      • 1.2. mw:写内存(memery write)
        • 格式:
        • 参数释义:
      • 1.3. 示例(先读、再写、再读)
        • md 0x42000000 8
        • mw 0x42000000 0x12345678 4
        • md 0x42000000 8
    • 2、Nand Flash操作命令
      • 2.1. nand info
      • 2.2. nand device
      • 2.3. nand bad
      • 2.4. nand read(.oob) [addr] [off] [size]
      • 2.5. nand dump[.oob] [addr] [size]
      • 2.6. nand write [addr] [off] [size]
      • 2.7. nand erase/clean [off] [size]
      • 2.8. nand scrub.chip
  • 二、Linux读写寄存器命令:devem
    • 1、读寄存器:
    • 2、写寄存器:
    • 3、例子:


一、U-Boot 内存 & flash操作指令

1、内存操作指令

1.1. md:读内存(memery display)

格式:

md[.b .w .l]  [addr]  [count]

md 0x42000000 8

参数释义:

.b .w .l :分别是字节、字、长字(两个字),不加默认为字节
addr     :要操作的内存地址
count    :写入的个数,默认4个字节表示一个长度

1.2. mw:写内存(memery write)

格式:

mw[.b .w .l]  [addr]  [data]  [count]

mw 0x42000000 0x12345678 4

参数释义:

data :要写入内存的数。
其余同上。

1.3. 示例(先读、再写、再读)

md 0x42000000 8

含义:显示内存地址0x42000000位置的数据,总长度为8个长度(每个长度默认四个字节):

IPQ5018# md 0x42000000 8
42000000: 44332211 44332211 44332211 44332211    ."3D."3D."3D."3D
42000010: ffffffff ffffffff ffffffff ffffffff    ................
IPQ5018# 

mw 0x42000000 0x12345678 4

含义:将0x12345678写入到内存地址为0x42000000的位置,总共写入4个长度:

IPQ5018# mw 0x42000000 0x12345678 4
IPQ5018# 

md 0x42000000 8

含义:显示内存地址0x42000000位置的数据,总长度为8个长度(每个长度默认四个字节):

IPQ5018# md 0x42000000 8
42000000: 12345678 12345678 12345678 12345678    xV4.xV4.xV4.xV4.
42000010: ffffffff ffffffff ffffffff ffffffff    ................
IPQ5018# 

2、Nand Flash操作命令

备注:nand有块、页等概念,且:擦除是指:将所有字节置1。

  • 擦除的最小单位是:块
  • 读写的最小单位是:页

2.1. nand info

查看nandflash 信息

2.2. nand device

查看nandflash 信息

2.3. nand bad

查看坏块

2.4. nand read(.oob) [addr] [off] [size]

备注:命令中的【addr】指的是RAM的地址(比如DDR),表示将flash的偏移地址【off】处的数据读到DDR的【addr】位置。

  • 读取data字段:nand read [addr] [off] [size]

  • 读取oob字段:nand read.oob [addr] [off] [size]

备注:
【读取data使用nand read】
【读取oob使用命令nand read.oob】

不管读取data还是读取oob,后面参数含义统一如下:
addr : RAM的地址(如:DDR)
off  : nand flash的地址
size : 指要读取nand flash的数据大小,
       但是如果是读取oob,size不能超过一个page的oob size,如果page size为512个字节,oob size就是16个字节.
       如果一次想读取完整的一个page的值,包含oob,使用的命令【nand dump】 

2.5. nand dump[.oob] [addr] [size]

读取flash addr地址开始的size 大小数据出来。最小单位是一个page.也就是说size小于一个page,也会读出一个page的数据。该数据包括oob数据。

如果使用dump.oob,则只读取oob字段。

IPQ5018# nand dump.oob 0x140000 0x100   
Page 00140000 dump:
OOB:
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff 07 3f fb
        de 8b 0a b0 ff ff ff ff
IPQ5018#

2.6. nand write [addr] [off] [size]

与nand read 命令类似,将内存地址addr的size大小数据写入到flash的off偏移地址去,该命令会自动跳过坏块。

2.7. nand erase/clean [off] [size]

清除flash off偏移地址开始的size大小的数据,最小单位是块。

2.8. nand scrub.chip

慎用该命令!
因为该命令会将flash中所有的内容都擦除,包括坏块标记,不论是出厂时的,还是后来使用过程中出现而新标记的。

使用该命令时会提示是否确定需要擦除,输入【y】即可。





二、Linux读写寄存器命令:devem

1、读寄存器:

devem RegAddr 

2、写寄存器:

devem RegAddr w Value

3、例子:

root@OpenWrt:/# devmem 0x9c78c 
[  146.422686] [lsy--->]: go to submit_descs from func: read_page_ecc
[  146.423178] [lsy--->]: go to submit_descs from func: read_page_ecc
0x00000550
root@OpenWrt:/# devmem 0x9c78c w 0x8550
root@OpenWrt:/# devmem 0x9c78c 
0x00008550
root@OpenWrt:/# 
root@OpenWrt:/# 
root@OpenWrt:/# 
root@OpenWrt:/# 
root@OpenWrt:/# 
root@OpenWrt:/# devmem 0x9b7a0
0x00000000
root@OpenWrt:/# devmem 0x9b064
0x00000007
root@OpenWrt:/# devmem 0x9c790
0x00000036
root@OpenWrt:/#

最后

以上就是能干小熊猫为你收集整理的【U-Boot && Linux命令】:【内存操作md、mw】、【nand flash操作】一、U-Boot 内存 & flash操作指令二、Linux读写寄存器命令:devem的全部内容,希望文章能够帮你解决【U-Boot && Linux命令】:【内存操作md、mw】、【nand flash操作】一、U-Boot 内存 & flash操作指令二、Linux读写寄存器命令:devem所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部