作为扩展性极强的通信接口,SPI通用总线能够支持丰富的外设生态——无论是以太网控制器CH390H、各类存储芯片(SPI Nor/NAND Flash、TF卡),还是自研的AirLink通信协议,均可基于SPI实现可靠的数据交互。

今天我们特别围绕这些实际应用问题,一起来聊聊。

一、SPI总线硬件配置

Air780Exx系列模组的SPI总线配置因型号而异,硬件设计前务必注意引脚资源差异。

1.1 常规型号支持2路通用SPI总线

  • SPI0:

    默认引脚为PIN83/84/85/86;

  • SPI1:
    可复用引脚为PIN28/29/57/58(PIN28/29默认功能为UART2,PIN57/58默认功能为UART3)。

下图以Air780EPM模组为例:

01 Air780EPM SPI通用接口 管脚251230 1101.png

1.2 以下型号只支持1路SPI0

Air780EHV和Air780EGP/EGG/EGH只支持1路SPI0,原因如下:

1)Air780EHV(全能音频系列)

因为内置了Audio Codec芯片ES8311,内部占用了PIN57/58的I2C0总线;PIN57/58外部不可再用,无法复用为SPI1_CLK/SPI1_MISO,进而Air780EHV也就无法支持SPI1通道了。

2)Air780EGP/EGG/EGH(定位+通信系列)

因为内置了GNSS定位芯片,内部占用了PIN28/29的UART2串口;PIN28/29外部不可再用,无法复用为SPI1_CS/SPI1_MOSI,进而Air780EGP、Air780EGG、Air780EGH也就无法支持SPI1通道。

1.3 相关注意事项

  • 多外设挂载:
    理论上,SPI总线可以通过不同的片选CS外挂多个不同的外设,但对不同片选下的外设要求是通信速率必须相同,不能低速率和高速率的外设挂载在同一个SPI总线下。

  • GPIO模拟SPI:
    除了SPI总线外,LuatOS也支持GPIO模拟SPI,但只适用于速率超低(低于100Kbps)的外设。在设计投板前,需要使用合宙的开发板做好充分的测试评估后,再进行实际的原理图和PCB设计。

  • 引脚初始化:
    在使用SPI功能之前,都需要先使用LuatIO工具生成pins配置json文件,也就是对IO的初始化功能配置。

LuatIO.png

二、SPI以太网应用(CH390H)

无论Air780系列模组还是Air8000系列模组,目前合宙LuatOS仅适配过CH390H以太网控制器。

2.1 硬件原理图

最新参考设计原理图

Y01.png

2.2 相关注意事项

1)挂载组合示例

以Air780EHV举例来说,SPI0可以做如下挂载组合:

  • CS0挂载CH390H,CS1挂载SPI TF卡;

  • CS0挂载CH390H,CS1挂载SPI Nor Flash;

  • CS0挂载CH390H,CS1挂载SPI NAND Flash;

  • CS0挂载一路CH390H,CS1挂载另一路CH390H,CS2挂载SPI TF卡;

  • CS0挂载一路CH390H,CS1挂载另一路CH390H,CS2挂载SPI Nor Flash;

  • CS0挂载一路CH390H,CS1挂载另一路CH390H,CS2挂载SPI NAND Flash。

注意!SPI总线挂载的外设越多,相应外设的响应速度也就会越低。

2)电源管理

当CH390的供电电源不支持通过GPIO控制使能管脚EN控制开启或关断时,SPI0_CS0注意上拉到CH390H供电电源上,以防止SPI0_CS0在低功耗状态下软件未初始化时为低,进而产生耗电。

102.png

3)相关资源

与以太网相关的LuatOS核心库、扩展库和相关文档:

SPI核心库:
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/

三、SPI TF卡应用

Air780Exx系列模组当前仅支持SPI接口的T-Flash(MicroSD),不支持SDIO。

3.1 硬件原理图

最新参考设计原理图

Y02.png

3.2 相关注意事项

1)挂载组合示例

以Air780EHV举例来说,SPI0可以做如下挂载组合:

  • CS0挂载CH390H,CS1挂载SPI TF卡;

  • CS0挂载一路CH390H,CS1挂载另一路CH390H,CS2挂载SPI TF卡。

注意!SPI总线挂载的外设越多,相应外设的响应速度也就会越低。

2)电源管理

不同的T-Flash需要的驱动电流可能不同,实际调试时可根据需要调整SPI信号上拉电阻的阻值大小。

当T-Flash的供电电源不支持通过GPIO控制使能管脚EN控制开启或关断时,SPI0_CS1注意上拉到T-Flash供电电源上,以防止SPI0_CS1在低功耗状态下软件未初始化时为低进而产生耗电。

203.png

3)相关资源

与SPI T-Flash相关的LuatOS核心库、扩展库和相关文档:

SPI核心库:
https://docs.openluat.com/osapi/core/spi/

fatfs核心库:
https://docs.openluat.com/osapi/core/fatfs/ 

fs核心库:
https://docs.openluat.com/osapi/core/fs/ 

io核心库:
https://docs.openluat.com/osapi/core/io/

应用指导文档:
https://docs.openluat.com/air780epm/luatos/app/driver/sd/

四、SPI Nor Flash应用

LuatOS已适配过的SPI Nor Flash有:
W25Q64、W25Q128、W25Q256等。

原则上所有支持SFDP协议的SPI Nor Flash,都可以支持。

4.1 硬件原理图

最新参考设计原理图

Y03.png

4.2 相关注意事项

1)挂载组合示例

以Air780EHV举例来说,SPI0可以做如下挂载组合:

  • CS0挂载CH390H,CS1挂载SPI Nor Flash;

  • CS0挂载一路CH390H,CS1挂载另一路CH390H,CS2挂载SPI Nor Flash。

注意!SPI总线挂载的外设越多,相应外设的响应速度也就会越低。

2)电源管理

当Nor Flash的供电电源不支持通过GPIO控制使能管脚EN控制开启或关断时,SPI0_CS2注意上拉到Nor Flash供电电源上,以防止SPI0_CS2在低功耗状态下软件未初始化时为低进而产生耗电。

303.png

3)相关资源

与SPI Nor Flash相关的LuatOS核心库、扩展库和相关文档:

SPI核心库:
https://docs.openluat.com/osapi/core/spi/

Little_flash核心库:
https://docs.openluat.com/osapi/core/little_flash/

Sfud核心库:
https://docs.openluat.com/osapi/core/sfud/

io核心库:
https://docs.openluat.com/osapi/core/io/

应用指导文档:
https://docs.openluat.com/air780epm/luatos/app/mulu/fs/

五、SPI NAND Flash应用

SPI NAND Flash原理图与SPI Nor Flash相同,可以直接参考。

关于Little_flash和Sfud核心库:

Little_flash支持挂载SPI Nor Flash和SPI NAND Flash;

Sfud只能挂载SPI Nor Flash。

无论SPI Nor Flash还是SPI NAND Flash,
都推荐优先使用Little_flash方式挂载。

LuatOS当前已适配过的SPI NAND Flash有:

  • W25N01GVZEIG

  • W25N01KVZEIR

  • W25N02KVZEIR

  • W25N04KVZEIR

更多些型号正陆续适配中,敬请关注合宙资料中心最新资料。

六、SPI AirLink应用

AirLink协议诞生于Air8000系列模组中“4G主控芯片和Wi-Fi协处理芯片”之间的通信协议,比UART速率更高,比USB功耗更低,适合对速率要求较高、功耗要求较低、尤其系统中没有支持USB HOST功能芯片的产品中。

AirLink核心库支持以下产品/产品组合:

  • Air8000系列;

  • Air8101+Air780Exx;

今天的内容就分享到这里了

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐