AM5728添加读写spi flash驱动

嗨喽,大家好,我是程序猿老王,程序老王就是我。

今天给大家讲一讲Linux内核中怎么添加spi flash驱动。

1. 设备树中添加的spi部分

1.1 AM5728设备树文件

am57xx-idk-common.dtsi

1.2 添加节点

在设备树中添加spigpio节点如下代码,见下图:

AM5728添加读写spi flash驱动_第1张图片

1.3 spigpio的管脚定义

查看硬件原理图主控板(底板V5-ANT_CARRIER_BOARD_V5.2.pdf和蚂蚁 5728-原理图SH-801001000026-04.pdf)和芯片手册(am5728_2.pdf)

AM5728添加读写spi flash驱动_第2张图片

上图只是底板原理图的管脚定义,由于该项目使用底板+扣板,因此需要看AM572部分的管脚定义

AM5728添加读写spi flash驱动_第3张图片

根据图中AM5728芯片的A25、B25在手册《am5728_2.pdf》4.2 Ball Characteristics章节中查找到具体的gpio管脚号,其他管脚相同方法。

AM5728添加读写spi flash驱动_第4张图片

1.4 添加pinmux的配置

在设备树中添加spigpio pinmux的配置

AM5728添加读写spi flash驱动_第5张图片

pinctrl-single,pins的配置

AM5728添加读写spi flash驱动_第6张图片

上图的这份DTS的代码中,规定了寄存器是从0x1400 开始, 所以在 AM572xSitara Processors Silicon Revision 2.0, 1.1 Texas Instruments Sitara Family of Products Technical Reference Manual (Rev.pdf 18.5 CONTROL_MODULE Registers 有相关的地址标示, 但是在 `*.dts ` 里面的代码是偏移了 0x1400 地址的,所以有如下代码:

flash_gpio_pins: flash_gpio_pins
{
        pinctrl-single,pins = <
               0x3A4 (PIN_INPUT | MUX_MODE14)    /*A25 SPI1_SCLK*/ 
               0x3AC (PIN_INPUT | MUX_MODE14)    /*B25 SPI1_D0*/
               0x2B0 (PIN_INPUT | MUX_MODE14)    /*J14 MCASP1_FSR*/ 
               0x80  (PIN_INPUT | MUX_MODE14)   /*U1 GPMC_A16/QSPI1_D0*/ 
        >;
 };

对应的TRM描述如下所示:

AM5728添加读写spi flash驱动_第7张图片

2. 添加配置编译项

2.1修改配置文件

在配置文件quarkant_defconfig中查看一下配置项是否打开

CONFIG_SPI_GPIO=m /*m:编译成模块.ko*/
CONFIG_SPI_SPIDEV=y
CONFIG_SPI_BITBANG=y
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
CONFIG_MTD=y

3. 添加flash型号

在/driver/mtd/devices/m25p80.c文件中p_ids数组中是否有“s25fl064km25”型号,如果没有,则在数组中添加该型号。

AM5728添加读写spi flash驱动_第8张图片

4. /dev/mtd0设备

4.1 AM5728启动后spi-gpio.ko加载成功后在/dev/下回多一个mtd0设备,如想使/dev/mtd0名称变为/dev/mtd7

4.2 在/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c文件中

int add_mtd_device(struct mtd_info *mtd)函数中
将i = idr_alloc(&mtd_idr, mtd, 0, 0, GFP_KERNEL);
修改为#define START_ID 7
i = idr_alloc(&mtd_idr, mtd, START_ID, 0, GFP_KERNEL);

5.在shell下进行读写flash测试

5.1读取flash数据到fpga.bin文件

insmod /*/spi-gpio.ko

dd if=/dev/mtd0 of=fpga.bin bs=1024 count=2000

5.3写fpga.bin文件数据到flash

dd if=fpga.bin of=/dev/mtd0 bs=1024 count=2000

-END-


关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。

你可能感兴趣的:(driver,fpga开发,linux,驱动开发)