machine.SPI
SPI (Serial Peripheral Interface) is a synchronous serial protocol consisting of a master and a slave.
The standard 4-wire mode consists of 4 wires: SCK (SCLK), CS (chip select), MOSI, MISO.
On the K210, SPI has the following characteristics:
- There are 4 SPI devices, of which SPI0, SPI1, and SPI3 can only work in master mode, and SPI2 can only work in slave mode. On MaixPy, SPI3 has been used to connect SPI Flash. It is temporarily reserved. It is necessary to consider the open interface and SPI Flash time-sharing multiplexing.
- Supports 1/2/4 / 8-wire full-duplex mode. In MaixPy, currently only supports standard (Motorola) 4-wire full-duplex mode (ie, SCK, MOSI, MISO, CS four pins)
- Maximum transmission rate of 45M
- Support DMA
- 4 configurable hardware chip select
1. Constructor
class machine.SPI (id, mode = SPI.MODE_MASTER, baudrate = 500000, polarity = 0, phase = 0, bits = 8, firstbit = SPI.MSB, sck, mosi, miso, cs0, cs1, cs2, cs3)
Create a new SPI object with the specified parameters
1.1. Parameters
id
: SPI ID, value range [0,3], currently only supports 0 and 1, and can only be master mode, 2 can only be used as slave, currently not implemented, 3 reservedmode
: SPI mode,MODE_MASTER
orMODE_MASTER_2
orMODE_MASTER_4
orMODE_MASTER_8
orMODE_SLAVE
, currently only supportsMODE_MASTER
baudrate
: SPI baud rate (frequency)polarity
: Polarity, the value is 0 or 1, which indicates the polarity of the SPI at idle, 0 represents low level, 1 represents high levelphase
: phase, value bit 0 or 1, which means to collect data at the first or second edge of the clock, 0 means the first, 1 means the secondbits
: data width, default value is 8, value range [4,32]firstbit
: Specify whether to transmit in MSB or LSB order. The default is SPI.MSB.sck
: SCK (Clock) pin, which can directly transmit the pin value. The value range is [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.mosi
: MOSI (host output) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.miso
: MISO (host input) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.cs0
: CS0 (chip select) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.cs1
: CS1 (chip select) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.cs2
: CS2 (chip select) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.cs3
: CS3 (chip select) pin, which can directly pass the pin value, value range: [0,47]. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.d0 ~ d7
: Data pins, used in non-standard 4-wire mode, currently reserved. Instead of setting it, use [fm] (../ builtin_py / fm.md) to manage the pin mapping uniformly.
2. Method
2.1. init
Constructor-like
SPI.init (id, mode = SPI.MODE_MASTER, baudrate = 500000, polarity = 0, phase = 0, bits = 8, firstbit = SPI.MSB, sck, mosi, miso, cs0)
parameters
Same as constructor
return value
no
2.2. read
Read data
SPI.read (nbytes, write = 0x00, cs = SPI.CS0)
parameters
nbytes
: the length to readcs
: Select chip select pins. Pins have been set forcs0
~cs3
during initialization. Here you only need to selectSPI.CS0
~SPI.CS3
. The default isSPI. .CS0
write
: Because it is full duplex, set the value of theMOSI
pin when reading. The default is0x00
, which is always low.
return value
bytes
data
2.3. readinto
Read the data and put it into the specified variable
SPI.readinto (buf, write = 0x00, cs = SPI.CS0)
parameters
buf
:bytearray
type, which defines the length, and the data is saved here after readingcs
: Select chip select pins. Pins have been set forcs0
~cs3
during initialization. Here you only need to selectSPI.CS0
~SPI.CS3
. The default isSPI. .CS0
write
: Because it is full duplex, set the value of theMOSI
pin when reading. The default is0x00
, which is always low.
return value
no
2.4. write
send data
SPI.write (buf, cs = SPI.CS0)
parameters
buf
:bytearray
type, which defines the data and lengthcs
: Select chip select pins. Pins have been set forcs0
~cs3
during initialization. Here you only need to selectSPI.CS0
~SPI.CS3
. The default isSPI. .CS0
return value
no
2.5. write_readinto
Send data while reading data to a variable, that is, full duplex
SPI.write (write_buf, read_buf, cs = SPI.CS0)
parameters
write_buf
:bytearray
type, which defines the data and length to be sentread_buf
:bytearray
type, which defines where the received data is storedcs
: Select chip select pins. Pins have been set forcs0
~cs3
during initialization. Here you only need to selectSPI.CS0
~SPI.CS3
. The default isSPI. .CS0
return value
no
2.6. deinit / \ del \
Log out of SPI, release hardware, shut down SPI clock
SPI.deinit ()
parameters
no
return value
no
Examples
spi.deinit ()
or
del spi
3. Constants
SPI0
: SPI 0SPI1
: SPI 1SPI2
: SPI 2MODE_MASTER
: as master modeMODE_MASTER_2
: as master modeMODE_MASTER_4
: as master modeMODE_MASTER_8
: as master modeMODE_SLAVE
: as slave modeMSB
: MSB, that is, the high-order or high-order byte is sent firstLSB
: LSB, that is, send low-order or low-order byte firstCS0
: Chip Select 0CS1
: Chip Select 1CS2
: Chip Select 2CS3
: Chip Selection 3
4. Examples
4.1. Example 1: Basic Read and Write
from machine import SPI
spi1 = SPI (SPI.SPI1, mode = SPI.MODE_MASTER, baudrate = 10000000, polarity = 0, phase = 0, bits = 8, firstbit = SPI.MSB, sck = 28, mosi = 29, miso = 30, cs0 = 27)
w = b'1234 '
r = bytearray (4)
spi1.write (w)
spi1.write (w, cs = SPI.CS0)
spi1.write_readinto (w, r)
spi1.read (5, write = 0x00)
spi1.readinto (r, write = 0x00)