| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- .. currentmodule:: machine
- .. _machine.SPI:
- class SPI -- a Serial Peripheral Interface bus protocol (master side)
- =====================================================================
- SPI is a synchronous serial protocol that is driven by a master. At the
- physical level, a bus consists of 3 lines: SCK, MOSI, MISO. Multiple devices
- can share the same bus. Each device should have a separate, 4th signal,
- SS (Slave Select), to select a particular device on a bus with which
- communication takes place. Management of an SS signal should happen in
- user code (via machine.Pin class).
- Constructors
- ------------
- .. class:: SPI(id, ...)
- Construct an SPI object on the given bus, ``id``. Values of ``id`` depend
- on a particular port and its hardware. Values 0, 1, etc. are commonly used
- to select hardware SPI block #0, #1, etc. Value -1 can be used for
- bitbanging (software) implementation of SPI (if supported by a port).
- With no additional parameters, the SPI object is created but not
- initialised (it has the settings from the last initialisation of
- the bus, if any). If extra arguments are given, the bus is initialised.
- See ``init`` for parameters of initialisation.
- Methods
- -------
- .. method:: SPI.init(baudrate=1000000, \*, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None, pins=(SCK, MOSI, MISO))
- Initialise the SPI bus with the given parameters:
- - ``baudrate`` is the SCK clock rate.
- - ``polarity`` can be 0 or 1, and is the level the idle clock line sits at.
- - ``phase`` can be 0 or 1 to sample data on the first or second clock edge
- respectively.
- - ``bits`` is the width in bits of each transfer. Only 8 is guaranteed to be supported by all hardware.
- - ``firstbit`` can be ``SPI.MSB`` or ``SPI.LSB``.
- - ``sck``, ``mosi``, ``miso`` are pins (machine.Pin) objects to use for bus signals. For most
- hardware SPI blocks (as selected by ``id`` parameter to the constructor), pins are fixed
- and cannot be changed. In some cases, hardware blocks allow 2-3 alternative pin sets for
- a hardware SPI block. Arbitrary pin assignments are possible only for a bitbanging SPI driver
- (``id`` = -1).
- - ``pins`` - WiPy port doesn't ``sck``, ``mosi``, ``miso`` arguments, and instead allows to
- specify them as a tuple of ``pins`` parameter.
- .. method:: SPI.deinit()
- Turn off the SPI bus.
- .. method:: SPI.read(nbytes, write=0x00)
- Read a number of bytes specified by ``nbytes`` while continuously writing
- the single byte given by ``write``.
- Returns a ``bytes`` object with the data that was read.
- .. method:: SPI.readinto(buf, write=0x00)
- Read into the buffer specified by ``buf`` while continuously writing the
- single byte given by ``write``.
- Returns ``None``.
- Note: on WiPy this function returns the number of bytes read.
- .. method:: SPI.write(buf)
- Write the bytes contained in ``buf``.
- Returns ``None``.
- Note: on WiPy this function returns the number of bytes written.
- .. method:: SPI.write_readinto(write_buf, read_buf)
- Write the bytes from ``write_buf`` while reading into ``read_buf``. The
- buffers can be the same or different, but both buffers must have the
- same length.
- Returns ``None``.
- Note: on WiPy this function returns the number of bytes written.
- Constants
- ---------
- .. data:: SPI.MASTER
- for initialising the SPI bus to master; this is only used for the WiPy
- .. data:: SPI.MSB
- set the first bit to be the most significant bit
- .. data:: SPI.LSB
- set the first bit to be the least significant bit
|