spi - spi Operation Library#

Adapted Air780E Air780EP Air780EPS Air700EAQ Air700EMQ Air700ECQ Air201

Note

This page document is automatically generated by this file. If there is any error, please submit issue or help modify pr, thank you!

Tip

This library has its own demo,click this link to view the demo example of spi

Tip

There are also video tutorials in this library, click this link to view

Constant#

constant

type

explanation

spi.MSB

number

Big Endian Mode

spi.LSB

number

Little Endian Mode

spi.master

number

Host Mode

spi.slave

number

slave mode

spi.full

number

Full Duplex

spi.half

number

half duplex

spi.SPI_0

number

SPI0

spi.SPI_1

number

SPI1

spi.SPI_2

number

SPI2

spi.SPI_3

number

SPI3

spi.SPI_4

number

SPI4

spi.HSPI_0

number

High-speed SPI0, currently 105 dedicated

spi.setup(id, cs, CPHA, CPOL, dataw, bandrate, bitdict, ms, mode)#

Set up and enable SPI

Parameters

Incoming Value Type

Explanation

int

SPI No., for example 0

int

CS Foot selection, not available in w600, please fill in nil

int

CPHA Default 0, optional 0/1

int

CPOL Default 0, optional 0/1

int

Data width, default 8bit

int

baud rate, default 2M=2000000

int

Size side, default spi.MSB, optional spi.LSB

int

Master-slave setting, default master 1, optional slave 0. Generally, only host mode is supported

int

Operating mode, full duplex 1, half duplex 0, default full duplex

Return Value

return value type

explanation

int

Returns 0 on success, otherwise returns another value

Examples

-- Initialization spi
spi.setup(0,20,0,0,8,2000000,spi.MSB,1,1)

spi.createSoft(cs, mosi, miso, clk, CPHA, CPOL, dataw, bitdict, ms, mode)#

Set up and enable the software SPI

Parameters

Incoming Value Type

Explanation

int

cs Pin number, incoming nil means Lua controls cs pin

int

mosi Pin number

int

miso Pin number

int

clk Pin number

int

Default 0, optional 0/1

int

Default 0, optional 0/1

int

Data width, default 8bit

int

Size side, default spi.MSB, optional spi.LSB

int

Master-slave setting, default master 1, optional slave 0. Generally, only host mode is supported

int

Operating mode, full duplex 1, half duplex 0, default half duplex

Return Value

return value type

explanation

Software SPI object

can be used as the ID of the SPI

Examples

-- Initialize software spi
local softSpiDevice = spi.createSoft(0, 1, 2, 3, 0, 0, 8, spi.MSB, 1, 1)
local result = spi.send(softSpiDevice, string.char(0x9f))

spi.close(id)#

Close the specified SPI

Parameters

Incoming Value Type

Explanation

int

SPI No., for example 0

Return Value

return value type

explanation

int

Returns 0 on success, otherwise returns another value

Examples

-- Initialization spi
spi.close(0)

spi.transfer(id, send_data, send_len, recv_len)#

Transferring SPI Data

Parameters

Incoming Value Type

Explanation

int

SPI number (e. g. 0) or software SPI object

string/zbuff

The data to be sent. If it is zbuff data, it will be read from the pointer where the object is located.

int

Optional. The length of the data to be sent. The default value is the length of data.

int

Optional. The length of the read data. The default value is 1

Return Value

return value type

explanation

string

Read successfully returns the string, otherwise it returns nil

Examples

-- Initialization spi
spi.setup(0,nil,0,0,8,2000000,spi.MSB,1,1)
local recv = spi.transfer(0, "123")--Send 123 and read data

local buff = zbuff.create(1024, 0x33) --Create a memory area with all initial values of 0x 33
local recv = spi.transfer(0, buff)--Start zbuff data from the pointer, send it all out, and read the data

spi.recv(id, size, buff)#

Receives SPI data of a specified length

Parameters

Incoming Value Type

Explanation

int

SPI No., for example 0

int

Data length

userdata

zbuff object, optional, 2024.3.29 New

Return Value

return value type

explanation

string/int

The string returned after the read is successful. If zbuff is passed in, the read size is returned. If an error is returned nil

Examples

-- Initialization spi
spi.setup(0,nil,0,0,8,2000000,spi.MSB,1,1)
-- Receive data
local recv = spi.recv(0, 4)--Receive 4 bytes of data

-- When the zbuff parameter is passed in, the return value is different. 2024.3.29 New
-- After a successful read, the pointer moves back len bytes
-- The write position starts with the current used() position, make sure there is enough space to write len-length data
local len = spi.recv(0, 4, buff)

spi.send(id, data[, len])#

Send SPI Data

Parameters

Incoming Value Type

Explanation

int

SPI No., for example 0

string/zbuff

The data to be sent. If it is zbuff data, it will be read from the pointer where the object is located.

int

Optional. The length of the data to be sent. The default value is the length of data.

Return Value

return value type

explanation

int

Send Results

Examples

-- Initialization spi
spi.setup(0,nil,0,0,8,2000000,spi.MSB,1,1)
local result = spi.send(0, "123")--Send 123

local buff = zbuff.create(1024, 0x33) --Create a memory area with all initial values of 0x 33
local result = spi.send(0, buff)--Start the zbuff data from the pointer and send it all out.

spi.deviceSetup(id, cs, CPHA, CPOL, dataw, bandrate, bitdict, ms, mode)#

Set up and enable SPI (object way)

Parameters

Incoming Value Type

Explanation

int

SPI No., for example 0

int

CS Foot selection, not available in w600, please fill in nil

int

CPHA Default 0, optional 0/1

int

CPOL Default 0, optional 0/1

int

Data width, default 8bit

int

baud rate, default 20M=20000000

int

Size side, default spi.MSB, optional spi.LSB

int

Master-slave setting, default master 1, optional slave 0. Generally, only host mode is supported

int

Operating mode, full duplex 1, half duplex 0, default full duplex

Return Value

return value type

explanation

userdata

spi_device

Examples

-- Initialization spi
local spi_device = spi.deviceSetup(0,17,0,0,8,2000000,spi.MSB,1,1)

spi_device:close()#

Close the specified SPI (object way)

Parameters

Incoming Value Type

Explanation

userdata

spi_device

Return Value

return value type

explanation

int

Returns 0 on success, otherwise returns another value

Examples

-- Initialization spi
spi_device.close()

spi_device:transfer(send_data[, len])#

Transfer SPI Data (Object Way)

Parameters

Incoming Value Type

Explanation

userdata

spi_device

string/zbuff

The data to be sent. If it is zbuff data, it will be read from the pointer where the object is located.

int

Optional. The length of the data to be sent. The default value is the length of data.

int

Optional. The length of the read data. The default value is 1

Return Value

return value type

explanation

string

Read successfully returns the string, otherwise it returns nil

Examples

-- Initialization spi
local spi_device = spi.device_setup(0,17,0,0,8,2000000,spi.MSB,1,1)
local recv = spi_device:transfer("123")--Send 123 and read data
local result = spi_device:transfer({0x00,0x01})--Send 0x 00,0x 01, and read data

local buff = zbuff.create(1024, 0x33) --Create a memory area with all initial values of 0x 33
local recv = spi_device:transfer(buff)--Start zbuff data from the pointer, send it all out, and read the data

spi_device:send(data[, len])#

Send SPI Data (Object Way)

Parameters

Incoming Value Type

Explanation

userdata

spi_device

string/zbuff

The data to be sent. If it is zbuff data, it will be read from the pointer where the object is located.

Return Value

return value type

explanation

int

Send Results

Examples

-- Initialization spi
local spi_device = spi.device_setup(0,17,0,0,8,2000000,spi.MSB,1,1)
local result = spi_device:send("123")--Send 123
local result = spi_device:send({0x00,0x01})--Send 0x00,0x01

local buff = zbuff.create(1024, 0x33) --Create a memory area with all initial values of 0x 33
local result = spi_device:send(buff)--Start the zbuff data from the pointer and send it all out.

spi_device:recv(size)#

Receives SPI data of a specified length (object method)

Parameters

Incoming Value Type

Explanation

userdata

spi_device

int

Data length

Return Value

return value type

explanation

string

Read successfully returns the string, otherwise it returns nil

Examples

-- Initialization spi
local spi_device = spi.device_setup(0,17,0,0,8,2000000,spi.MSB,1,1)
local recv = spi_device:recv(4)--Receive 4 bytes of data

spi.xfer(id, txbuff, rxbuff, rx_len, transfer_done_topic)#

The non-blocking hardware SPI transfers SPI data in order to improve core utilization. The API directly returns whether to start the transmission or not. After the transmission is completed, the API is suitable for hardware SPI to transmit a large amount of data. SPI and software SPI occupied by peripheral functions (LCD SPI,W5500 SPI, etc.) cannot be used. Traditional blocking type is recommended for a small amount of data transmission.API

Parameters

Incoming Value Type

Explanation

userdata

or int spi_device Or spi_id, note that if it is spi_device, you need to manually pull it up after the transmission is completed.cs!!!!!!

zbuff

The data to be sent, if nil, only receives the data, because of the non-blocking model, in order to ensure the validity of the dynamic data, can only use zbuff, the data sent from.zbuff.addr

zbuff

Receive data, if it is nil, only send data, due to the non-blocking model, in order to ensure the validity of dynamic data, only zbuff can be used, and the received data is stored from zbuff.addr.

int

The length of the transmitted data, especially if it is half duplex, send before receive, such as spi flash operation, then the length = send byte receive byte, note that the above send and receive buff should leave enough data, subsequent receive data processing needs to skip the send data length byte

string

The callback after the transfer is complete topic

Return Value

return value type

explanation

boolean

true/false Whether this transmission is started correctly, true, start, false, and cannot be started with errors. Message transfer_done_topic and boolean results are published when the transfer is complete

Examples

local result = spi.xfer(spi.SPI_0, txbuff, rxbuff, 1024, "SPIDONE") if result then result, spi_id, succ, error_code = sys.waitUntil("SPIDONE") end if not result or not succ then log.info("spi fail, error code", error_code) else log.info("spi ok") end