transferred spi module documentation
This commit is contained in:
parent
c60e243962
commit
bd20f15dfe
|
@ -0,0 +1,173 @@
|
||||||
|
#spi module
|
||||||
|
All transactions for sending and receiving are most-significant-bit first and least-significant last.
|
||||||
|
For technical details of the underlying hardware refer to [metalphreak's ESP8266 HSPI articles](http://d.av.id.au/blog/tag/hspi/).
|
||||||
|
|
||||||
|
## High Level Functions
|
||||||
|
The high level functions provide a send & receive API for half- and
|
||||||
|
full-duplex mode. Sent and received data items are restricted to 1 - 32 bit
|
||||||
|
length and each data item is surrounded by (H)SPI CS inactive.
|
||||||
|
|
||||||
|
## spi.recv()
|
||||||
|
Receive data from SPI.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`spi.recv(id, size[, default_data])`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `size` number of data items to be read
|
||||||
|
- `default_data` default data being sent on MOSI (all-1 if omitted)
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
String containing the bytes read from SPI.
|
||||||
|
|
||||||
|
####See also
|
||||||
|
[spi.send()](#spisend)
|
||||||
|
|
||||||
|
## spi.send()
|
||||||
|
Send data via SPI in half-duplex mode. Send & receive data in full-duplex mode.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
HALFDUPLEX:<br />
|
||||||
|
`wrote = spi.send(id, data1[, data2[, ..., datan]])`
|
||||||
|
|
||||||
|
FULLDUPLEX:<br />
|
||||||
|
`wrote[, rdata1[, ..., rdatan]] = spi.send(id, data1[, data2[, ..., datan]])`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `data` data can be either a string, a table or an integer number.<br/>Each data item is considered with `databits` number of bits.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
- `wrote` number of written bytes
|
||||||
|
- `rdata` received data when configured with `spi.FULLDUPLEX`<br />Same data type as corresponding data parameter.
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```lua
|
||||||
|
=spi.send(1, 0, 255, 255, 255)
|
||||||
|
4 255 192 32 0
|
||||||
|
x = {spi.send(1, 0, 255, 255, 255)}
|
||||||
|
=x[1]
|
||||||
|
4
|
||||||
|
=x[2]
|
||||||
|
255
|
||||||
|
=x[3]
|
||||||
|
192
|
||||||
|
=x[4]
|
||||||
|
32
|
||||||
|
=x[5]
|
||||||
|
0
|
||||||
|
=x[6]
|
||||||
|
nil
|
||||||
|
=#x
|
||||||
|
5
|
||||||
|
|
||||||
|
_, _, x = spi.send(1, 0, {255, 255, 255})
|
||||||
|
=x[1]
|
||||||
|
192
|
||||||
|
=x[2]
|
||||||
|
32
|
||||||
|
=x[3]
|
||||||
|
0
|
||||||
|
```
|
||||||
|
#### See also
|
||||||
|
- [spi.setup()](#spisetup)
|
||||||
|
- [spi.recv()](#spirecv)
|
||||||
|
|
||||||
|
## spi.setup()
|
||||||
|
Set up the SPI configuration.
|
||||||
|
Refer to [Serial Peripheral Interface Bus](https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Clock_polarity_and_phase) for details regarding the clock polarity and phase definition.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`spi.setup(id, mode, cpol, cpha, databits, clock_div[, duplex_mode])`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `mode` select master or slave mode
|
||||||
|
- `spi.MASTER`
|
||||||
|
- `spi.SLAVE` - **not supported currently**
|
||||||
|
- `cpol` clock polarity selection
|
||||||
|
- `spi.CPOL_LOW`
|
||||||
|
- `spi.CPOL_HIGH` - **not supported currently**
|
||||||
|
- `cpha` clock phase selection
|
||||||
|
- `spi.CPHA_LOW`
|
||||||
|
- `spi.CPHA_HIGH`
|
||||||
|
- `databits` number of bits per data item 1 - 32
|
||||||
|
- `clock_div` SPI clock divider, f(SPI) = f(CPU) / `clock_div`
|
||||||
|
- `duplex_mode` duplex mode
|
||||||
|
- `spi.HALFDUPLEX` (default when omitted)
|
||||||
|
- `spi.FULLDUPLEX`
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
Number: 1
|
||||||
|
|
||||||
|
## Low Level Hardware Functions
|
||||||
|
The low level functions provide a hardware-centric API for application
|
||||||
|
scenarios that need to excercise more complex SPI transactions. The
|
||||||
|
programming model is built up around the HW send and receive buffers and SPI
|
||||||
|
transactions are initiated with full control over the hardware features.
|
||||||
|
|
||||||
|
## spi.get_miso()
|
||||||
|
Extract data items from MISO buffer after `spi.transaction()`.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`data1[, data2[, ..., datan]] = spi.get_miso(id, offset, bitlen, num)`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `offset` bit offset into MISO buffer for first data item
|
||||||
|
- `bitlen` bit length of a single data item
|
||||||
|
- `num` number of data items to retrieve
|
||||||
|
|
||||||
|
####Returns
|
||||||
|
`num` data items
|
||||||
|
|
||||||
|
#### See also
|
||||||
|
[spi.transaction()](#spitransaction)
|
||||||
|
|
||||||
|
## spi.set_mosi()
|
||||||
|
Insert data items into MOSI buffer for `spi.transaction()`.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`spi.set_mosi(id, offset, bitlen, data1[, data2[, ..., datan]])`
|
||||||
|
|
||||||
|
####Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `offset` bit offset into MOSI buffer for inserting data1 and subsequent items
|
||||||
|
- `bitlen` bit length of data1, data2, ...
|
||||||
|
- `data` data items where `bitlen` number of bits are considered for the transaction.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
`nil`
|
||||||
|
|
||||||
|
#### See also
|
||||||
|
[spi.transaction()](#spitransaction)
|
||||||
|
|
||||||
|
## spi.transaction()
|
||||||
|
Start an SPI transaction, consisting of up to 5 phases:
|
||||||
|
|
||||||
|
1. Command
|
||||||
|
2. Address
|
||||||
|
3. MOSI
|
||||||
|
4. Dummy
|
||||||
|
5. MISO
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`spi.transaction(id, cmd_bitlen, cmd_data, addr_bitlen, addr_data, mosi_bitlen, dummy_bitlen, miso_bitlen)`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `id` SPI ID number: 0 for SPI, 1 for HSPI
|
||||||
|
- `cmd_bitlen` bit length of the command phase (0 - 16)
|
||||||
|
- `cmd_data` data for command phase
|
||||||
|
- `addr_bitlen` bit length for address phase (0 - 32)
|
||||||
|
- `addr_data` data for command phase
|
||||||
|
- `mosi_bitlen` bit length of the MOSI phase (0 - 512)
|
||||||
|
- `dummy_bitlen` bit length of the dummy phase (0 - 256)
|
||||||
|
- `miso_bitlen` bit length of the MISO phase (0 - 512) for half-duplex.<br />Full-duplex mode is activated with a negative value.
|
||||||
|
|
||||||
|
####Returns
|
||||||
|
`nil`
|
||||||
|
|
||||||
|
####See also
|
||||||
|
- [spi.set_mosi()](#spisetmosi)
|
||||||
|
- [spi.get_miso()](#spigetmiso)
|
|
@ -40,6 +40,7 @@ pages:
|
||||||
- 'rtctime': 'en/modules/rtctime.md'
|
- 'rtctime': 'en/modules/rtctime.md'
|
||||||
- 'rtcfifo': 'en/modules/rtcfifo.md'
|
- 'rtcfifo': 'en/modules/rtcfifo.md'
|
||||||
- 'sntp': 'en/modules/sntp.md'
|
- 'sntp': 'en/modules/sntp.md'
|
||||||
|
- 'spi': 'en/modules/spi.md'
|
||||||
- 'tmr': 'en/modules/tmr.md'
|
- 'tmr': 'en/modules/tmr.md'
|
||||||
- 'u8g': 'en/modules/u8g.md'
|
- 'u8g': 'en/modules/u8g.md'
|
||||||
- 'uart': 'en/modules/uart.md'
|
- 'uart': 'en/modules/uart.md'
|
||||||
|
|
Loading…
Reference in New Issue