电子说
今天咋们要讲的是SPI与4G模组的技术要领,以低功耗模组Air724UG为例,展示给大家学习。
一、简介
SPI 是串行外设接口(Serial Peripheral Interface)的缩写。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选),就可以完成一个主设备和一个或多个从设备之间的通信,事实上 3 根也可以(单向传输时)。在嵌入式系统中,主要应用于 EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间的通信,在全双工模式下,传输速率可达上Mbps的水平。
Air724模块对外提供的硬件SPI接口数量有两路,即 SPI1、SPI2,其他SPI通道以复用封装作为 LCD 或 MMC 功能管脚使用。
二、演示功能概述
本教程教你如何使用开发板的SPI总线读写 FLASH。
三、准备硬件环境
3.1 开发板准备
使用 EVB_Air724 开发板,如下图所示:
此开发板的详细使用说明参考:
https://docs.openluat.com/air724ug/product/
Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
api文档:
https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 数据通信线
USB 数据线一根(micro USB)。
3.3 PC 电脑
WIN7 以及以上版本的 WINDOWS 系统。
3.4 SPI FLASH 模块
25Q64JVSIQ 注意电平是 3.3V
3.5 电平转换模块
双向电平转换模块(3.3V、1.8V)
3.6 组装硬件环境
USB数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。
由于 SPI FLASH 模块只支持 3.3v 电平,开发板 SPI 接口只支持 1.8V 电平,所以 SPI FLASH 模块和开发板之间需要用电平转换模块将相互的 IO 电平转换,具体连接图如下图所示。
开发板与电平转换模块连接:
SPI FLASH 与电平转换模块连接:
四、准备软件环境
4.1 下载调试工具
使用说明参考:
Luatools下载和详细使用
https://docs.openluat.com/Luatools/
4.2 源码及固件
4.2.1 底层 core 下载
下载底层固件,并解压
链接:
https://docs.openluat.com/air724ug/luatos/firmware/
如下图所示,红框的是我们要使用到的
4.2.2 本教程使用的 demo 见附件:
https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/spiFlash
4.3 下载固件和脚本到开发板中
打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。
点击项目管理测试选项。
进入管理界面,如下图所示。
点击选择文件,选择底层固件,我的文件放在 D:luatOSAir724 路径中
点击增加脚本或资源文件,选择之前下载的程序源码,如下图所示。
点击下载底层和脚本,下载完成如下图所示。
五、代码示例介绍
5.1 API 说明
5.1.1 spi 开启接口
spi.setup(id,chpa,cpol,dataBits,clock,duplex)
(点开放大)
返回值
5.1.2 spi 写数据
spi.send(id,data[,cscontrol])
(点开放大)
返回值
5.1.3 读数据
spi.recv(id,length[,cscontrol])
(点开放大)
返回值
5.1.4 读写数据
spi.send_recv(id,data[,cscontrol])
参数 | 类型 | 释义 | 取值 |
id | number | SPI 的 ID spi.SPI_1 表示 SPI1,Air720U 系列只有 SPI1 作为普通 SPI 接口使用,固定传 spi.SPI_1 即可通道选择 | 0:普通 spi 1:lcdspi |
data |
string | 要发送的数据 | |
cscontrol | number | cs 是否自动控制,可选参数默认 0,1 代表 CS 随数据自动变化,0 代表 cs 先拉低数据结束再恢复 | 0/1 |
返回值
5.1.5 关闭 SPI
spi.close(id)
参数 | 类型 | 释义 | 取值 |
id | number | SPI 的 ID,spi.SPI_1 表示 SPI1,Air720U 系列只有 SPI1 作为普通 SPI 接口使用,固定传 spi.SPI_1 即可 | 0:普通 spi 1:lcdspi 复用为普通 spi |
返回值
5.2 test_SPIFlash.lua 代码
test_SPIFlash 程序流程。
5.3 main.lua 代码
本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,然后加载 test_SPIFlash 测试模块。
5.4 spiFlash.lua
spiFlash.lua 为 W25Q32/BH25Q32 驱动代码。
六、开机调试
6.1 开发板开机
连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。
6.2 SPI FLASH 调试
读出 SPI FLASH ID, 并显示 SPI FLASH 的型号,并且读写测试。
七、常见问题
7.1 为什么 SPI 通信中会出现一些乱码或数据丢失
答:SPI 通信的接口电平不匹配。可用示波器观测 SPI 接口在通信过程中的电平状态和电平质量,确认用户所使用的通信设备中接口电平是否与 Air724 模块 SPI1 接口电平一致,Air724 开发板上的 Air724 模块的 SPI1 接口电平均为 1.8V,如不匹配,请确保一致。不能过高或过低,过低有可能会导致电平电压不能被识别,过高有可能会损坏 SPI 通信接口,另外,建议使用一些高速器件作为电平转换器件,可提高接口电平的信号质量。
7.2 标准 spi 可以驱动的目标芯片电压是多少?
1.8V,这个电压是写死的,无法设置,如果目标芯片工作电压不在此范围内需要用电平转换芯片。
分享完毕
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !