LISA QSPILCD PIO 传输示例
源码位置: samples/drivers/devices/lisa_qspilcd/basic 查看源码
功能说明
演示使用 QSPI LCD 驱动进行 PIO(轮询)模式的数据传输,适用于小数据量命令传输场景。
PIO 模式下 CPU 直接参与数据搬移,传输完成后函数返回,无需额外等待。
硬件连接
PA18: QSPI CLK(时钟)
PA19: QSPI CS(片选,可选使用 GPIO 控制)
PA20: QSPI IO0(数据线 0)
PA21: QSPI IO1(数据线 1)
PA22: QSPI IO2(数据线 2)
PA23: QSPI IO3(数据线 3)
连接到支持 QSPI 接口的 LCD 显示屏模组。
使用场景
适用于发送 LCD 命令、配置寄存器等小数据量传输场景,实现简单,无需配置 DMA。
示例步骤
获取 QSPI LCD 设备
配置 CS 引脚(可选,使用 GPIO 手动控制)
准备传输数据缓冲区
配置传输参数(数据线模式、位宽、PIO 模式)
调用
lisa_qspilcd_transfer()同步传输
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在示例目录下执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini
Note
如果在 SDK 根目录执行,需要指定示例路径:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs
Note
烧录参数说明:
-s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是/dev/ttyUSB0或/dev/ttyACM0- 可通过ls /dev/tty*命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名-b 3000000:烧录波特率(3Mbps)0x0:烧录起始地址build/arcs.bin:编译生成的固件路径-C arcs:芯片类型
注意事项:
确保开发板已正确连接到电脑
如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口
预期输出
终端输出:
=== LISA QSPILCD PIO example ===
QSPILCD device ready
CS GPIO configured
PIO transfer (Single lane, 8-bit): OK
PIO transfer (Quad lane, 8-bit): OK
All transfers completed successfully!
核心 API
API |
说明 |
|---|---|
|
获取 QSPI LCD 设备 |
|
配置 QSPI 控制参数(模式、时钟极性、数据位宽、总线速度等) |
|
配置 CS 引脚(GPIO 手动控制) |
|
控制 CS 引脚电平 |
|
启动数据传输(PIO 模式) |
控制参数配置
使用 lisa_qspilcd_control() 配置 QSPI LCD 的工作参数:
uint32_t control = LISA_QSPILCD_TXIO_PIO | /* TX 使用 PIO 模式 */
LISA_QSPILCD_CPOL0_CPHA0 | /* 时钟极性和相位 */
LISA_QSPILCD_MSB_LSB | /* MSB 优先 */
LISA_QSPILCD_MODE_MASTER | /* 主机模式 */
LISA_QSPILCD_DATA_BITS(8); /* 8 位数据宽度 */
lisa_qspilcd_control(qspi, control, 50*1000*1000); /* 50MHz 总线速度 */
控制码字段说明
字段 |
宏定义 |
说明 |
|---|---|---|
TX I/O 模式 |
|
使用 CPU 轮询发送 |
|
使用 DMA 发送 |
|
|
自动选择(PIO 或 DMA) |
|
时钟极性/相位 |
|
CPOL=0, CPHA=0(Mode 0) |
|
CPOL=0, CPHA=1(Mode 1) |
|
|
CPOL=1, CPHA=0(Mode 2) |
|
|
CPOL=1, CPHA=1(Mode 3) |
|
位序 |
|
高位优先(MSB first) |
|
低位优先(LSB first) |
|
主从模式 |
|
主机模式 |
|
从机模式 |
|
数据位宽 |
|
设置数据位宽(n = 1~32) |
函数原型
lisa_err_t lisa_qspilcd_control(lisa_device_t *dev, uint32_t control, uint32_t arg);
dev: QSPI LCD 设备句柄
control: 控制码,由上述宏按位或组合
arg: 附加参数,通常为总线速度(Hz)
返回值: 成功返回
LISA_DEVICE_OK,失败返回错误码
PIO 传输说明
lisa_qspilcd_transfer() 在 PIO 模式下的工作原理:
底层实现:CPU 直接将数据写入 QSPI FIFO,轮询等待传输完成
返回时机:传输完成后函数返回,无需额外等待
适用场景:小数据量命令传输(如 LCD 初始化命令、寄存器配置)
返回值:成功返回 0,失败返回负数错误码
关键代码
/* 获取 QSPI LCD 设备 */
lisa_device_t *qspi = lisa_device_get("qspilcd0");
/* 配置 CS 引脚(使用 GPIO 手动控制) */
lisa_device_t *gpio = lisa_device_get("gpioa");
lisa_qspilcd_cs_configure(qspi, gpio, 19);
/* 准备传输数据 */
uint8_t cmd[] = {0x2A, 0x00, 0x00, 0x00, 0xEF};
/* 配置 PIO 传输参数 */
lisa_qspilcd_xfer_t xfer = {
.buf = cmd,
.size_bytes = sizeof(cmd),
.lane = LISA_QSPILCD_LANE_SINGLE, /* 单线模式 */
.data_bits = 8,
.use_dma = false, /* PIO 模式 */
};
/* 拉低 CS,启动传输 */
lisa_qspilcd_cs_control(qspi, false);
lisa_qspilcd_transfer(qspi, &xfer);
/* 拉高 CS,结束传输 */
lisa_qspilcd_cs_control(qspi, true);
配置说明
数据线模式
模式 |
枚举值 |
说明 |
|---|---|---|
单线 |
|
使用 IO0 传输,兼容性最好 |
双线 |
|
使用 IO0/IO1 传输,带宽翻倍 |
四线 |
|
使用 IO0-IO3 传输,带宽最高 |
注意事项
CS 控制时序:手动 CS 模式下,需在传输前拉低、传输后拉高 CS
数据线模式切换:切换数据线模式应在总线空闲时进行
适用数据量:PIO 模式适合小数据量传输,大数据量建议使用 DMA 模式