SPI#

基本信息#

  • 起草日期: 2020-03-27

  • 设计人员: chenxuuu

为什么需要SPI#

  • 与外部设备收发数据进行通信

设计思路和边界#

  • 管理并抽象SPI的C API, 提供一套Lua API供用户代码调用

C API(平台层)#

//初始化配置SPI各项参数,并打开SPI
//成功返回0
int8_t luat_spi_setup(luat_spi_t* spi);
//关闭SPI,成功返回0
uint8_t luat_spi_close(uint8_t spi_id);
//收发SPI数据,返回接收字节数
uint32_t luat_spi_transfer(uint8_t spi_id, uint8_t* send_buf, uint8_t* recv_buf, uint32_t length);
//收SPI数据,返回接收字节数
uint32_t luat_spi_recv(uint8_t spi_id, uint8_t* recv_buf, uint32_t length);
//发SPI数据,返回发送字节数
uint32_t luat_spi_send(uint8_t spi_id, uint8_t* send_buf, uint32_t length);

Lua API#

常量#

--高低位顺序
spi.LSB
spi.MSB--一般用这个
--主从
spi.master
spi.slave
--半双工/全双工
spi.half
spi.full

用例#

local spiId = 1
local cs = 10

local result = spi.setup(
    spiId,--串口id
    cs,
    0,--CPHA
    0,--CPOL
    8,--数据宽度
    20000000,--最大频率20M
    spi.MSB,--高低位顺序    可选,默认高位在前
    spi.master,--主模式     可选,默认主
    spi.full,--全双工       可选,默认全双工
)

if result ~= 0 then--返回值为0,表示打开成功
    print("spi open error",result)
end

--发数据
spi.write(spiId,"test")

--收数据
print(spi.recv(spiId,10))

--收发数据
print(spi.transfer(spiId,"test"))