5.3.4. 测试指南

5.3.4.1. 测试环境

5.3.4.1.1. 硬件

  • 开发板,或者 FPGA 板子

  • 板子上必须要接有 SPINAND

5.3.4.1.2. 软件

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

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

5.3.4.2. 编译烧录

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

5.3.4.3. 验证

5.3.4.3.1. SPINAND 识别

烧录完成后,断开电源,上电,检查设备,看到 spinand0 设备,表明系统已识别 SPINAND:

aic /> list_device
device           type         ref count
-------- -------------------- ----------
...
spinand0         SPI Device           0
...

备注

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

5.3.4.3.2. 查看文件

进入 rodata 目录,查看文件:

aic /> cd sd
aic /> cd rodata
aic/rodata> ls
Directory /rodata:
lvgl_data           <DIR>

至此, SPINAND 挂载完成。

5.3.4.3.3. Baremetal 相关命令使用方法

Baremetal 和 Bootloader 中实现了 spinand, mtd 命令测试工具,具体用法相同。

首先在板子上运行 ZX-RTT Baremetal 程序。

5.3.4.3.3.1. 查看相关命令

在串口控制台执行命令 help 查看当前系统命令

aic # 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 层信息。

5.3.4.3.3.2. 获取命令帮助信息

执行命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

执行命令 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>
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 命令进行测试

5.3.4.3.3.3. 测试 spinand 相关命令

初始化 SPI NAND 设备

aic # spinand init 0

打印 SPI NAND 数据

aic # 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 数据到内存上

aic # spinand read 0x30060000 0x800 0x800
aic # 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
.........

5.3.4.3.3.4. 测试 mtd 相关命令

初始化 mtd 设备

aic # mtd list
MTD devices:nand0                    0x00000000 ~ 0x08000000
    bootloader           0x00000000 ~ 0x00100000
    os                   0x00100000 ~ 0x00200000
    data                 0x00200000 ~ 0x00700000

打印 mtd 分区数据

aic # 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
.........

aic # 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 读速度,并打印读取的数据

aic # mtd read os 0x30060000 0x800 0x800
sfud_read speed: 2048 byte, 241 us -> 8297 KB/s

aic # 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
.........

测试擦除命令

aic # 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
.........

aic # mtd erase data 0 0x20000        //执行擦除命令, 大小与块大小对齐

aic # 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
.........

测试写入新数据

aic # mtd write data 0x30060000 0 0x800

aic # 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
.........

5.3.4.3.4. RTOS 相关命令使用方法

参考调试指南配置,并编译,烧录程序,在板子上运行 ZX-RTT 程序。

5.3.4.3.4.1. 查看相关设备

aic /> 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

5.3.4.3.4.2. 查看相关命令

aic /> 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 用法