16. SPI接口 读写SPI FLASH模块

本次实验使用的flash为野火小智W25Q64模块:

../_images/show-peripheral-w25q64.png

W25Q64模块和扩展板接线对照表如下:

W25Q64模块

扩展板SPI接口丝印

3V3

3V3

GND

GND

CS

P13

DO

DO

DI

DI

CLK

CLK

其中CS使用扩展GPIO的P13。

以鲁班猫1为例,扩展板的SPI0对应鲁班猫的SPI3_M1,修改/boot/uEnv/uEnv.txt,开启相应插件:

1
sudo vi /boot/uEnv/uEnv.txt
../_images/show-dtbo14.png

开启插件后,重启开发板。

16.1. python代码测试

python测试代码为:lubancat_rk_code_storage/expansion_board/spi/flash/main.py

测试前需要根据实际情况修改main.py中的按键输入事件,SPI接口及CS引脚:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
'''
filename : main.py
'''

...

spi_bus   = 3                       # spi总线编号
key_event = "/dev/input/event9"     # 按键输入设备
cs_chip   = "6"                     # cs脚, gpiochip
cs_pin    = 11                      # cs脚, gpionum

...

将main.py所在的整个文件夹传到板卡,执行以下命令运行程序:

1
2
# 运行程序
sudo python main.py

程序运行初,会读取W25Q64地址零处的一字节数据。按下key1按键,会生成 一个随机数并写入到地址零。按下key2按键,立即读取数据。

16.2. c代码测试

C测试代码为:lubancat_rk_code_storage/expansion_board/spi/flash/main.c

测试前需要根据实际情况修改main.c中的按键输入事件,SPI接口及CS引脚:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
/*
filename : main.c
*/

...

#define KEY_EVENT       "/dev/input/event9"
#define SPI_BUS         "/dev/spidev3.0"

#define CS_GPIO_CHIP    "/dev/gpiochip6"
#define CS_GPIO_NUM     (11)

...

将main.c所在的整个文件夹传到板卡,执行以下命令编译和运行程序:

1
2
3
4
5
# 编译程序
gcc -o main main.c w25qxx.c -lgpiod

# 运行程序
sudo ./main

程序运行初,会读取W25Q64地址零处的一字节数据。按下key1按键,会生成 一个随机数并写入到地址零。按下key2按键,立即读取数据。