SPI接口

1、Air8101共支持2路SPI接口,SPI0和SPI1,其中:
SPI0可复用为三处管脚组合,SPI1只有一处管脚组合;

2、两路SPI,SPI0和SPI1,最常用的功能组合是:
说明!虽然下表以SPI0挂载CH490H/SD卡/LCD Driver和SPI1用于AirLink举例说明,但SPI0和SPI1在功能使用上是完全一样的,可根据各自项目的实际情况灵活选用;
| 以太网控制器CH390H | SD卡 | LCD Driver初始化 | AirLink over SPI | ||
|---|---|---|---|---|---|
| SPI0 | CS0 | ✅ | |||
| CS1 | ✅ | ||||
| CS2 | ✅ | ||||
| SP1 | CS | ✅ | |||
| 备注说明 | SPI接口CH390H成熟应用 | SPI接口SD卡 | 有些LCD模组会用到 | AirLink需独享一路SPI |
SPI接口SD卡
1、SPI接口的SD卡参考电路;

- 当SD卡的供电电源不支持通过GPIO控制使能管脚EN控制开启或关断时,SPI0_CS1注意上拉到T-Flash供电电源上,以防止SPI0_CS1在低功耗状态下软件未初始化时为低进而产生耗电;
- 不同的SD卡需要的驱动电流可能不同,实际调试时可根据需要调整SPI信号上拉电阻的阻值大小;
- 插拔插座非常容易产生静电,建议加上TVS进行,以免被ESD打坏;
样品购买链接:
SIM和GPIO用,DFN1006-2封装,AR3321P1LV,应能微-淘宝网
2、与SPI接口的SD卡相关的LuatOS核心库、扩展库和相关文档;
-
SPI核心库
说明!使用LuatOS核心库SPI时,注意使用 spi.deviceSetup()、spi_device:transfer()、spi_device:send()、spi_device:recv()等spi_device相关的API函数;
https://docs.openluat.com/osapi/core/spi/
- fatfs核心库
https://docs.openluat.com/osapi/core/fatfs/
- io核心库
https://docs.openluat.com/osapi/core/io/
- fs核心库
https://docs.openluat.com/osapi/core/fs/
- 相关指导文档
https://docs.openluat.com/air780epm/luatos/app/driver/sd/
SPI接口以太网控制器CH390H
1、SPI接口的以太网控制器CH390H参考电路;

- 如果CH390H的供电电源LDO不支持通过GPIO控制使能管脚EN开启或关断时,SPI0_CS0注意上拉到CH390H供电电源上,以防止SPI0_CS0在低功耗状态下软件未初始化时为低进而产生耗电;
2、与以太网相关的LuatOS核心库、扩展库和相关文档;
- SPI核心库 说明!使用LuatOS核心库SPI时,注意使用 spi.deviceSetup()、spi_device:transfer()、spi_device:send()、spi_device:recv()等spi_device相关的API函数;
https://docs.openluat.com/osapi/core/spi/
- netdrv核心库
https://docs.openluat.com/osapi/core/netdrv/
- exnetif扩展库
https://docs.openluat.com/osapi/ext/exnetif/
- 相关指导文档
https://docs.openluat.com/air780epm/luatos/app/socket/
AirLink over SPI(挂载4G模组)

1、AirLink协议诞生于Air8000系列模组中"4G主控芯片和WiFi协处理芯片"之间的通信协议,比UART速率更高,比USB功耗更低,适合对速率要求较高、功耗要求较低、尤其系统中不支持USB HOST功能芯片的产品中;
Air8101通过AirLink挂载合宙Air780Exx系列模组,可实现"WiFi+4G"双模上网功能;
AirLink详细介绍
https://docs.openluat.com/protocols/airlink/
2、AirLink over SPI共有8个信号组成,4个SPI信号,3个辅助信号;
| AirLink七个信号 | 功能说明 |
|---|---|
| AirLink_SPI_CLK | 主机提供时钟,以"Air8101+Air780Exx系列模组"组合为例,Air8101为主,由Air8101提供时钟注意!AirLink_SPI_CLK接Air780Exx模组的SPI_CLK; |
| AirLink_SPI_MOSI | 主机输出数据到从机,以"Air8101+Air780Exx系列模组"组合为例,Air8101为主,此信号由Air8101输出数据给Air780Exx系列模组注意!AirLink_SPI_MOSI也接Air780Exx模组的SPI_MOSI,不需要反向接SPI_MISO,切记! |
| AirLink_SPI_MISO | 从机输出数据到主机,以"Air8101+Air780Exx系列模组"组合为例,Air780Exx系列模组为辅,此信号由Air780Exx模组输出数据给Air8101注意!AirLink_SPI_MISO也接Air780Exx模组的SPI_MISO,不需要反向接SPI_MOSI,切记! |
| AirLink_SPI_CS | 主机提供片选信号,拉低有效,以"Air8101+Air780Exx系列模组"组合为例,Air8101为主,此信号由Air8101提供给Air780Exx系列模组注意!AirLink_SPI_CS接Air780Exx模组的SPI_CS; |
| AirLink_RDY | 从机就绪信号, 拉低有效, 若RDY为高电平, 不可进行SPI通信,在"Air8101+Air780Exx系列模组"组合中,由Air780Exx系列模组提供给Air8101 |
| AirLink_IRQ | 从机数据通知主机, 拉低有效, 可选;在"Air8101+Air780Exx系列模组"组合中,由Air780Exx系列模组提供给Air8101;说明!AirLink协议支持轮询和中断模式, 若IRQ不选用则为轮询模式, 轮询周期默认5ms, 可配置 |
| AirLink_WAKEUP | 主机唤醒从机,在"Air8101+Air780Exx系列模组"组合中,由Air8101唤醒Air780Exx系列模组; |
| AirLink_RST | 主机复位从机,在"Air8101+Air780Exx系列模组"组合中,由Air8101复位Air780Exx系列模组; |
3、在"Air8101+Air780Exx系列模组"组合中,从机Air780Exx模组相应辅助信号的选择,我们推荐如下;
说明!虽然AirLink_RDY、AirLink_IRQ和AirLink_WAKEUP可以指定任意GPIO负责,但为了尽可能与我们提供给大家的软件demo一致,除非有其它的复用功能冲突,否则尽可能使用我们推荐的GPIO;
| AirLink八个信号 | Air8101 | Air780EPM/EHM/EHV/EHN/EHU | Air780EGP/EGG/EGH | Air700ECP/ECH |
|---|---|---|---|---|
| AirLink_SPI_CLK | PIN65:SPI1_CLK | PIN86:SPI0_CLK | PIN86:SPI0_CLK | PIN62:SPI0_CLK |
| AirLink_SPI_MOSI | PIN67:SPI1_MOSI | PIN85:SPI0_MOSI | PIN85:SPI0_MOSI | PIN35:SPI0_MOSI |
| AirLink_SPI_MISO | PIN8:SPI1_MISO | PIN84:SPI0_MISO | PIN84:SPI0_MISO | PIN61:SPI0_MISO |
| AirLink_SPI_CS | PIN66:SPI1_CS | PIN83:SPI0_CS | PIN83:SPI0_CS | PIN36:SPI0_CS |
| AirLink_RDY(输入) | PIN69:GPIO39或 PIN10:GPIO7二选一 | PIN19:GPIO22 | PIN19:GPIO22 | PIN71:GPIO22 |
| AirLink_IRQ(输入) | PIN9:GPIO6 | PIN20:GPIO24 | PIN20:GPIO24 | PIN39:GPIO24 |
| AirLink_WAKEUP(输出) | PIN68:GPIO12 | PIN107:GPIO21 | PIN102:GPIO20 | PIN48:GPIO20 或 PIN70:GPIO21二选一 |
| AirLink_RST(输出) | PIN10:GPIO7 | PIN15:RESET | PIN15:RESET | PIN15:RESET |
| 说明 | 请结合Air8101和Air780EPM/EHM/EHV/EHC/EHU/EGP/EGG/EGH和Air700ECP/ECH管脚图进行理解; Air780Exx系列:https://docs.openluat.com/air780epm/luatos/hardware/ Air700Exx系列:https://docs.openluat.com/air700ech/luatos/hardware/ | |||
以"Air8101+Air780PM"组合为例,参考原理图如下:
Air8101部分:

Air780EPM部分:

SPI总线常见的坑;
SPI作为总线协议,可以在一路SPI上挂载多个外设,每个设备分配一条独立的SPI-CS片选;
通过CS拉低片选机制,灵活打开相应外设;
合宙多个型号模组的开发板上,就通过这种方式,至少同时挂载了SD卡槽和CH390H;
CH390H的坑
当CH390H未供电时,其MISO MOSI CLK三个信号为在CH390H芯片内部为下拉状态,这时会将三个信号的电平拉低到非正常逻辑电平状态;
这个时候如果打开SPI总线上的其它外设,比如SD卡,会造成SD卡的读取失败,或者几率性失败或成功,原因就是因为SPI信号的逻辑电平混乱所致;
比如,我们设置的IO电平为3.3V,实际此时的电平可能是2V左右,其逻辑高电平处于临界状态,进而造成通信异常;
解决办法是必须将给CH390H的供电打开;
如下为CH390H截图;


SD卡槽
SPI总线接上拉电阻到LDO后会出现异常,比如,Air780系列V1.4开发板,SD卡部分将SPI总线上拉高到SD_3V3,用于增加SPI总线的驱动能力;

当其他同路SPI外设要使用时,SD卡的这路LDO必须要打开,否则会造成SPI通信不正常;
原因是,给每个外设供电的LDO,以LP5907MFX为例,其在关闭时,LDO电源输出管脚会有下拉电阻到地,进而造成SPI电平拉低,比如Air780EHM电平设置为3.3V时,会被拉低到2.2V甚至2V以下,造成SPI通信不正常;

所以,
当硬件设计中将SPI上拉到某一LDO时,一定要将该LDO打开才可以保证SPI正常通信;