目录
1. uboot下的调试命令
sf命令的用法:
示例:
==> sf probe 0:0 1000000 0x2103
在进行擦除、读、写nor flash前,必须先进行sf probe,probe成功后才能够进行其他操作。
==> sf erase 0x700000 +0x100000
把nor flash中偏移为0x700000,长度为0x100000的区域擦除。
==> mw.b 0x8000000 0x23 0x100
==> md.b 0x8000000 0x100
把数据0x23,写入内存偏移为0x8000000,写入长度为0x100。
把内存偏移为0x8000000,长度为0x100的数据打印出来。
==> sf write 0x8000000 0x700000 0x100
把内存偏移为0x8000000的数据,写入nor flash中偏移为0x700000,写入长度为0x100。
==> sf read 0x9000000 0x700000 0x200
==> md.b 0x9000000 0x200
把nor flash中偏移为0x700000,长度为0x200的数据读入到内存偏移为0x9000000。
把内存偏移为0x9000000,长度为0x200的数据打印出来。
2. kernel下的调试命令
insmod *.ko后,probe执行完并且识别到nor flash设备后,就可以进行擦除、读、写功能的验证了,主要有两种调试命令。
2.1 sysfs
(1) cat /sys/cdns_qspi/cqspidbg /* dump寄存器或者驱动控制块 */
(2) echo readreg <offset> > /sys/cdns_qspi/cqspidbg /* 读寄存器 */
(3) echo writereg <offset> <value> > /sys/cdns_qspi/cqspidbg /* 写寄存器 */
(4) echo readid 0 > /sys/cdns_qspi/cqspidbg /* 读device id */
(5) echo readstatus 0 > /sys/cdns_qspi/cqspidbg /* 读status/config/flag寄存器 */
(6) echo erase <offset> <length> > /sys/cdns_qspi/cqspidbg /* 擦除指定偏移和长度的sector区域 */
/* 从指定偏移位置读指定长度的内容到临时文件 */
(7) echo readdata <offset> <length> > /sys/cdns_qspi/cqspidbg
/* 向指定偏移位置写入指定长度的内容,具体内容由pattern决定 */
(8) echo writedata <offset> <length> <pattern> > /sys/cdns_qspi/cqspidbg
示例:
# echo erase 0x700000 0x100000 > /sys/cdns_qspi/cqspidbg
把nor flash中偏移为0x700000,长度为0x100000的区域擦除。
# echo writedata 0x700000 0x100 0x1 > /sys/cdns_qspi/cqspidbg
把0x1决定的数据,写入nor flash中偏移为0x700000,写入长度为0x100。
# echo readdata 0x700000 0x200 > /sys/cdns_qspi/cqspidbg
把nor flash中偏移为0x700000,长度为0x200的数据读到临时文件中(/tmp/rd.bin)。
# hexdump -C /tmp/rd.bin
查看二进制文件rd.bin。
2.2 mtd_debug
首先需要rootfs中支持mtd_debug命令。
mtd_debug用法:
示例:
# mtd_debug erase /dev/mtd1 0x700000 0x100000
把nor flash(/dev/mtd1)中偏移为0x700000,长度为0x100000的区域擦除。
# mtd_debug write /dev/mtd1 0x700000 0x100 /tmp/rd.bin
把/tmp/rd.bin文件中的数据,写入nor flash中偏移为0x700000,写入长度为0x100。
# mtd_debug read /dev/mtd1 0x700000 0x200 /tmp/rd_1.bin
把nor flash中偏移为0x700000,长度为0x200的数据读到临时文件中(/tmp/rd_1.bin)。