Edit online

测试指南

测试环境
  • 硬件
    • 开发板,或者 FPGA 板子

    • 板子上必须要接有 SPINOR

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

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

编译烧录

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

验证

  1. SPINOR 识别
    烧录完成后,断开电源,上电,检查设备,看到 norflash0 设备,表明系统已识别 SPINOR:
    aic /> list_device
    device           type         ref count
    -------- -------------------- ----------
    ...
    norflash0        Block Device         0
    ...
    

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

  2. 查看文件
    进入 rodata 目录,查看文件:
    aic /> cd sd
    aic /> cd rodata
    aic/rodata> ls
    Directory /rodata:
    lvgl_data           <DIR>
    

    至此, SPINOR 挂载完成。

  3. 查看设备
    aic/> list device
    device                   type         ref count
    ---------------- -------------------- ----------
    wdt              WDT Device           0
    blk_data         Block Device         0
    data             MTD Device           1
    blk_rodata_r     Block Device         0
    rodata_r         MTD Device           0
    blk_rodata       Block Device         1
    rodata           MTD Device           0
    blk_os_r         Block Device         0
    os_r             MTD Device           0
    blk_os           Block Device         0
    os               MTD Device           0
    blk_env_r        Block Device         0
    env_r            MTD Device           0
    blk_env          Block Device         0
    env              MTD Device           0
    blk_spl          Block Device         0
    spl              MTD Device           0

    上面 SPINOR 设备存在两种,一种是 MTD 设备,用来挂载 Littlefs 文件系统,另外一种是 Block 设备,用来挂载 FatFS 文件系统

Baremetal 相关命令用法

Baremetal 和 Bootloader 中实现了 spinor, mtd 命令测试工具,具体用法相同。
  1. 首先在板子上运行 Luban-Lite Baremetal 程序。在串口控制台执行命令 help 查看当前系统命令
    aic # help
    Command list:  help                 Show all commands.
    history              Show history.
    md                   Memory display
    mtd                  MTD R/W command.
    mw                   Memory write
    reboot               Reboot device.
    reset                Reboot device.
    spinor               SPI NOR flash R/W command.

    从中可看到, spinormtd 命令工具。SFUD 层之上的一层为 mtd 层, spinor 命令可以查看 SFUD 层信息, mtd 命令可以查看 mtd 层信息。

  2. 获取命令帮助信息。
    • 执行命令 spinor help 可得到如下帮助信息:
      aic # spinor help
      spinor read write command:
      spinor init <spi bus id>
      spinor dump  <offset> <size>
      spinor read  <addr> <offset> <size>
      spinor erase <offset> <size>
      spinor write <addr> <offset> <size>
      e.g.:
      spinor read 0x40000000 0 256
    • 执行命令 mtd help 可得到如下帮助信息
      aic # 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>
      e.g.:
      mtd read spl 0x40000000 0 0x1000

    开发推荐使用 mtd 命令进行测试

  3. 测试 spinor 相关命令:
    1. 初始化 SPI NOR 设备
      aic # spinor init 0
      probe spinor flash success.
    2. 打印 SPI NOR 数据
      aic # spinor dump 0 0x800
      0x300530c0 : 41 49 43 20 26 e5 67 b1 01 00 01 00 10 64 01 00
      0x300530d0 : 00 00 00 00 78 62 01 00 00 00 10 30 00 01 10 30
      0x300530e0 : 00 00 00 00 00 00 00 00 00 64 01 00 10 00 00 00
      .........
    3. 读取 SPI NOR 数据到内存上
      aic # spinor read 0x30060000 0x800 0x800
      aic # md 0x30060000 0x800
      0x30060000 : 33 05 f7 40 82 80 03 46 05 00 83 c6 05 00 05 05
      0x30060010 : 85 05 63 14 d6 00 e3 18 06 fe 33 05 d6 40 82 80
      0x30060020 : 11 05 91 05 e3 11 d6 fe 01 45 82 80 21 05 a1 05
      .........
  4. 测试 mtd 相关命令
    1. 初始化 mtd 设备
      aic # mtd list
      MTD devices:nor0                     0x00000000 ~ 0x01000000
          spl_1                0x00000000 ~ 0x00020000
          spl_2                0x00020000 ~ 0x00040000
          os                   0x00040000 ~ 0x00140000
          rodata               0x00140000 ~ 0x00740000
          data                 0x00740000 ~ 0x00d40000
    2. 打印 mtd 数据
      aic # mtd dump spl_1 0 0x80
      0x30052b5c : 41 49 43 20 26 e5 67 b1 01 00 01 00 10 64 01 00
      0x30052b6c : 00 00 00 00 78 62 01 00 00 00 10 30 00 01 10 30
      0x30052b7c : 00 00 00 00 00 00 00 00 00 64 01 00 10 00 00 00
      .........
      
      aic # mtd dump os 0 0x80
      0x30052b74 : 41 49 43 20 1c a7 0c d2 01 00 01 00 10 d8 00 00
      0x30052b84 : 00 00 00 00 9c d6 00 00 00 00 04 30 00 01 04 30
      0x30052b94 : 00 00 00 00 00 00 00 00 00 d8 00 00 10 00 00 00
      .........
    3. 读取 mtd 数据到内存上
      aic # mtd read spl_1 0x30060000 0x800 0x800
      sfud_read speed: 2048 byte, 1511 us -> 1323 KB/s
      
      aic # md 0x30060000 0x800
      0x30060000 : 33 05 f7 40 82 80 03 46 05 00 83 c6 05 00 05 05
      0x30060010 : 85 05 63 14 d6 00 e3 18 06 fe 33 05 d6 40 82 80
      0x30060020 : 11 05 91 05 e3 11 d6 fe 01 45 82 80 21 05 a1 05
      .........
    4. 测试擦除命令
      aic # mtd dump rodata 0 0x800 //打印擦除前的数据
      0x30052e34 : eb 3c 90 4d 54 4f 4f 34 30 34 33 00 10 08 01 00
      0x30052e44 : 02 80 03 13 01 f8 01 00 0d 00 02 00 00 00 00 00
      0x30052e54 : 00 00 00 00 80 00 29 67 3e cf 0f 4e 4f 20 4e 41
      .........
      
      aic # mtd erase rodata 0 0x2000       //执行擦除命令
      
      aic # mtd dump rodata 0 0x800   //打印擦除后的数据
      0x30052e34 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      0x30052e44 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      0x30052e54 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      .........
    5. 测试写入新数据
      aic # mtd write rodata 0x30060000 0 0x800
      
      aic # mtd dump rodata 0 0x800   //读取新数据,判断是否写入正确
      0x30052e34 : 33 05 f7 40 82 80 03 46 05 00 83 c6 05 00 05 05
      0x30052e44 : 85 05 63 14 d6 00 e3 18 06 fe 33 05 d6 40 82 80
      0x30052e54 : 11 05 91 05 e3 11 d6 fe 01 45 82 80 21 05 a1 05
      .........