Edit online

测试指南

23 Dec 2024
Read time: 10 minute(s)

测试环境

  • 硬件
    • 开发板,或者 FPGA 板子

    • 板子上必须要接有 SPINAND

  • 软件
    • PC 端的串口终端软件,用于 PC 和开发板进行串口通信

    • RT-Thread DFS 组件自带了一些命令的文件操作工具,如 cp、mkdir 等

编译烧录

配置完成后,保存退出,编译、烧录

验证 SPI NAND 识别

烧录完成后,断开电源并上电,使用下列命令检查设备:
list_device
在输出结果中,看到 spinand0 设备,表明系统已识别 SPINAND:
device           type         ref count
-------- -------------------- ----------
...
spinand0         SPI Device           0
...
注:

若使用手动挂载,则在此时执行 mount blk_rodata /rodata elmmount data /data uffs

查看文件

    1. 进入 rodata 目录:
      cd sd
      cd rodata
    2. 使用下列命令查看文件:
      ls
      输出示例如下:
      
      Directory /rodata:
      lvgl_data           <DIR>

    至此, SPINAND 挂载完成。

Baremetal 相关命令使用方法

Baremetal 和 Bootloader 中实现了 spinandmtd 命令测试工具,使用用法相同。

使用spinandmtd 命令测试工具之前,需要在板子上运行 Luban-Lite Baremetal 程序。

  • 查看 spinandmtd 的相关命令
    在串口控制台执行命令 help 查看当前系统命令:
    help
    系统输出如下所示:
    Command list:  help                 Show all commands.
    history              Show history.
    md                   Memory display
    mtd                  MTD R/W command.
    mw                   Memory write
    nid                  Display NAND manu ID. need init first
    reboot               Reboot device.
    reset                Reboot device.
    spinand              SPI NAND flash R/W command.

    spinandmtd 命令工具。spinand 层之上的一层为 mtd 层,spinand 命令可以查看 spinand 层信息,mtd 命令可以查看 mtd 层信息。

  • 获取和测试 spinand 命令
    • 执行下列命令可以获取 spinand 命令帮助信息:
      spinand help
      输出示例如下:
      spinand read write command:
      spinand init  <spi bus id>
      spinand read <addr offset size>
      spinand dump <offset size>
      spinand oobdump <offset>
      spinand write <addr offset size>
      spinand erase <offset size>
      spinand contread <offset size>
      spinand read 0x40000000 0 0x20000
    • 初始化 SPI NAND 设备:
      spinand init 0
    • 打印 SPI NAND 数据

      spinand dump 0 0X800
      0x300540e0 : 41 49 43 50 2f 00 00 00 02 ff ff ff ff ff ff ff
      0x300540f0 : ff ff ff ff 00 00 00 00 40 00 00 00 80 00 00 00
      0x30054100 : c0 00 00 00 68 61 bc af 01 00 00 00 41 00 00 00
      .........
    • 读取 SPI NAND 数据到内存上

      spinand read 0x30060000 0x800 0x800
      md 0x30060000 0x800
      0x30060000 : 41 49 43 20 e3 21 79 3b 01 00 01 00 10 6c 01 00
      0x30060010 : 00 00 00 00 b0 6a 01 00 00 00 10 30 00 01 10 30
      0x30060020 : 00 00 00 00 00 00 00 00 00 6c 01 00 10 00 00 00
      .........
  • 获取和测试 mtd 命令
    执行下列命令:
    mtd help
    输出结果如下:
    mtd read write command:
    mtd list
    mtd dump  <part> <offset> <size>
    mtd read  <part> <addr> <offset> <size>
    mtd erase <part> <offset> <size>
    mtd write <part> <addr> <offset> <size>
    mtd oobdump  <part> <offset>
    mtd oobread  <part> <addr> <offset>
    mtd oobwrite <part> <addr> <offset>
    mtd contread <part> <addr> <offset> <size>
    e.g.:
    mtd read spl 0x40000000 0 0x1000
    注:

    在开发过程中,推荐使用 mtd 命令进行测试。

    • 初始化 mtd 设备

      mtd list
      MTD devices:nand0                    0x00000000 ~ 0x08000000
          bootloader           0x00000000 ~ 0x00100000
          os                   0x00100000 ~ 0x00200000
          data                 0x00200000 ~ 0x00700000
    • 打印 mtd 分区数据

      mtd dump bootloader 0 0x80
      0x300540d0 : 41 49 43 50 32 00 00 00 02 ff ff ff ff ff ff ff
      0x300540e0 : ff ff ff ff 00 00 00 00 40 00 00 00 80 00 00 00
      0x300540f0 : c0 00 00 00 99 5a bc af 01 00 00 00 41 00 00 00
      .........
      
      mtd dump os 0 0x80
      0x300540d0 : 41 49 43 20 56 f4 1b 53 01 00 01 00 10 e4 00 00
      0x300540e0 : 00 00 00 00 c0 e2 00 00 00 00 04 30 00 01 04 30
      0x300540f0 : 00 00 00 00 00 00 00 00 00 e4 00 00 10 00 00 00
      .........
    • 测试 mtd 读速度,并打印读取的数据:

      mtd read os 0x30060000 0x800 0x800
      sfud_read speed: 2048 byte, 241 us -> 8297 KB/s
      
      md 0x30060000 0x800
      0x30060000 : 06 00 82 80 81 47 01 00 0b c7 f5 80 0b 57 f5 00
      0x30060010 : 85 07 7d fb 82 80 2a 86 d9 b7 aa 85 17 d5 00 00
      0x30060020 : 03 25 c5 20 09 a0 41 11 26 c2 aa 84 2e 85 06 c6
      .........
    • 测试擦除命令:
      打印擦除前的数据:
      mtd dump data 0 0x800  
      0x30054158 : 41 49 43 20 6a 55 c3 39 01 00 01 00 10 69 01 00
      0x30054168 : 00 00 00 00 88 67 01 00 00 00 10 30 00 01 10 30
      0x30054178 : 00 00 00 00 00 00 00 00 00 69 01 00 10 00 00 00
      .........
      
      
      执行擦除命令, 大小与块大小对齐:
      mtd erase data 0 0x20000
      打印擦除后的数据:
      mtd dump data 0x0 0x800
      0x30054318 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      0x30054328 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      0x30054338 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      .........
    • 测试写入新数据
      mtd write data 0x30060000 0 0x800
    • 读取新数据,判断是否写入正确
      mtd dump data 0 0x800
      0x3005435c : 06 00 82 80 81 47 01 00 0b c7 f5 80 0b 57 f5 00
      0x3005436c : 85 07 7d fb 82 80 2a 86 d9 b7 aa 85 17 d5 00 00
      0x3005437c : 03 25 c5 20 09 a0 41 11 26 c2 aa 84 2e 85 06 c6
      .........

RTOS 相关命令使用方法

参考调试指南配置,并编译,烧录程序,在板子上运行 Luban-Lite 程序。
  • 查看相关设备
    list device
    device           type         ref count
    -------- -------------------- ----------
    wdt      WDT Device           0
    data     MTD Device           1
    rodata   Block Device         1
    os       MTD Device           0
    spl_2    MTD Device           0
    spl_1    MTD Device           0
    aicfb    Graphic Device       0
    gt911    Touch Device         0
    norflash Block Device         0
    qspi01   SPI Device           0
  • 查看相关命令
    mtd_nand
    mtd_nand [OPTION] [PARAM ...]
            id       <name>            Get nandid by given name
            read     <name> <bn> <pn>  Read data on page <pn> of block <bn> of device <name>
            readcont     <name> <bn> <pn> <size>  Read size data on page <pn> of block <bn> of device <name>
            readoob  <name> <bn> <pn>  Read oob  on page <pn> of block <bn> of device <name>
            write    <name> <bn> <pn>  Run write test on page <pn> of block <bn> of device <name>
            erase    <name> <bn>       Erase on block <bn> of device <name>
            eraseall <name>            Erase all block on device <name>

    具体用法可以参考上面 mtd 用法