1、设备树中添加spidev0.0
&spi0 {
/* Disable SPI NOR by default: it optional on Orange Pi Zero boards */
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
status = "okay";
spidev@0{
compatible = "Allwinner,sun8i-h2-spi0";
reg = <0>;
spi-max-frequency = <40000000>;
// 128M spi-nor flash layout
partition@00000000 {
label = "u-boot";
reg = <0x00000000 0x000C0000>;
};
partition@000C0000 {
label = "bootenv";
reg = <0x000C0000 0x00020000>;
};
partition@000E0000 {
label = "dtb";
reg = <0x000E0000 0x00020000>;
};
partition@00100000 {
label = "kernel";
reg = <0x00100000 0x00500000>;
};
partition@00600000 {
label = "rootfs";
reg = <0x00600000 0x00A00000>;
};
};
};
2、驱动中添加compatiable
3、uboot配置
u-boot/configs/nano_c1_defconfig:
CONFIG_SPI_SUNXI=y
CONFIG_SPL_SPI_FLASH_SUPPORT=y
4、make menuconfig -->utils-配置flashrom包
CONFIG_PACKAGE_flashrom=y
5、(查看读写的flash型号flashrom是否已经添加,没有添加自己需要添加)增加要读写的flash信息(以XMC为例)
//flashchips.c文件
{
.vendor = "XinXin",
.name = "XM25QH128C",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
.model_id = ST_XM25QH128C,
.total_size = 16384,
.page_size = 256,
/* OTP: 1536B total; read 0x48; write 0x42, erase 0x44 */
/* QPI: enable 0x38, disable 0xFF */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
.eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
.eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
/* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
.printlock = spi_prettyprint_status_register_bp4_srwd,
.unlock = spi_disable_blockprotect_bp4_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2700, 3600},
},
定义设备和厂商ID
//flashchips.h文件
#define ST_XM25QH128C 0x4018
6、系统编译成功后会在/usr/sbin下生成flashrom工具
根据一下命令读写:
read flash: flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash.bin
write flash: flashrom -p linux_spi:dev=/dev/spidev0.0 -w flash.bin
其他命令也可以flashrom -h去查看
root@OpenWrt:/# flashrom -h flashrom v1.2 on Linux 5.4.124 (armv7l) flashrom is free software, get the source code at https://flashrom.org Usage: flashrom [-h|-R|-L| -p <programmername>[:<parameters>] [-c <chipname>] (--flash-name|--flash-size| [-E|(-r|-w|-v) <file>] [(-l <layoutfile>|--ifd| --fmap|--fmap-file <file>) [-i <imagename>]...] [-n] [-N] [-f])] [-V[V[V]]] [-o <logfile>] -h | --help print this help text -R | --version print version (release) -r | --read <file> read flash and save to <file> -w | --write <file> write <file> to flash -v | --verify <file> verify flash against <file> -E | --erase erase flash memory -V | --verbose more verbose output -c | --chip <chipname> probe only for specified flash chip -f | --force force specific operations (see man page) -n | --noverify don't auto-verify -N | --noverify-all verify included regions only (cf. -i) -l | --layout <layoutfile> read ROM layout from <layoutfile> --flash-name read out the detected flash name --flash-size read out the detected flash size --fmap read ROM layout from fmap embedded in ROM --fmap-file <fmapfile> read ROM layout from fmap in <fmapfile> --ifd read layout from an Intel Firmware Descriptor -i | --image <name> only flash image <name> from flash layout -o | --output <logfile> log output to <logfile> --flash-contents <ref-file> assume flash contents to be <ref-file> -L | --list-supported print supported devices -p | --programmer <name>[:<param>] specify the programmer device. One of internal, dummy, gfxnvidia, drkaiser, satasii, atavia, it8212, ft2232_spi, serprog, buspirate_spi, dediprog, developerbox, pony_spi, nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, linux_mtd, linux_spi, usbblaster_spi, mstarddc_spi, pickit2_spi, ch341a_spi, digilent_spi, stlinkv3_spi. You can specify one of -h, -R, -L, -E, -r, -w, -v or no operation. If no operation is specified, flashrom will only probe for flash chips.