spi-hdlc-adapter is an adapter tool for using a SPI interface as if it were an HDLC-lite encoded bidirectional asynchronous serial stream. It uses the SPI protocol outlined in Appendix A.2 of the Spinel protocol document.
spi-hdlc-adapter [options] <spi-device-path>
stdoutfor HDLC input/output. Useful when directly started by the program that will be using it.
--pty: Create a pseudo terminal for HDLC input/output. The path of the newly-created PTY will be written to
stdout, followed by a newline.
--raw: Do not encode/decode packets using HDLC. Instead, write whole, raw frames to the specified input and output FDs. This is useful for emulating a serial port, or when datagram-based sockets are supplied for
stdout(when used with
--mtu=[MTU]: Specify the MTU. Currently only used in raw mode. Default and maximum value is 2043. Must be greater than zero.
--gpio-int[=gpio-path]: Specify a path to the Linux sysfs-exported GPIO directory for the
I̅N̅T̅pin. If not specified,
spi-hdlc-adapterwill fall back to polling, which is inefficient.
--gpio-reset[=gpio-path]: Specify a path to the Linux sysfs-exported GPIO directory for the
--spi-mode[=mode]: Specify the SPI mode to use (0-3). Default value is
--spi-speed[=hertz]: Specify the SPI speed in hertz. Default value is
--spi-cs-delay[=usec]: Specify the delay after C̅S̅ assertion, in microseconds. Default is 20µs. Note that this may need to be set to zero for spi-hdlc-adapter to work with some SPI drivers.
--spi-align-allowance[=n]: Specify the maximum number of 0xFF bytes to clip from start of MISO frame. This makes this tool usable with SPI slaves which have buggy SPI blocks that prepend a variable number of 0xFF bytes to the start of MISO frame. Default value is
0. Maximum value is
16. This should be set to
7for chips in the SiLabs EM35x family.
--spi-small-packet=[n]: Specify the smallest packet we can receive in a single SPI transaction. Packets sent by the slave which are smaller than or equal to this size will require only a single SPI transaction to be successfully transmitted. Increasing this value will (up to a point) decrease latency for smaller packets at the expense of overall bandwidth. Default value is 32. The minimum value is 0. The maximum value is 2043.
--verbose[=num]: Change log verbosity level (Repeatable). num argument is optional and value 1 is default when not specified. Every instance of this option will increment or decrement (when num is negative) the syslog log level accordingly. Starting log level is LOG_NOTICE (5).
--help: Print out usage information to
spi-device-path is a required argument since it indicates which SPI device to use. An example path might be
The GPIO paths are to the top-level directory for that GPIO. They must be already be exported before
spi-hdlc-adapter can use them.
If an MCU reset is detected by the reset bit being set on a SPI frame, the special vendor-specific HDLC-lite symbol
0xF8 is emitted. If
--gpio-reset is specified, the HDLC client can trigger an MCU reset by sending the symbols
0x7E 0x13 0x11 0x7E or by sending
spi-hdlc-adapter will configure the following properties on the GPIOs:
When resetting the slave device,
spi-hdlc performs the following procedure:
Some simple usage statistics are printed out to syslog at exit and whenever the
SIGUSR1 signal is received. The easiest way to send that signal to
spi-hdlc-adapter is like this:
# killall -sigusr1 spi-hdlc-adapter
At which point you will see something like this in the syslogs:
spi-hdlc-adapter: INFO: sSlaveResetCount=16 spi-hdlc-adapter: INFO: sSpiFrameCount=2673 spi-hdlc-adapter: INFO: sSpiValidFrameCount=2668 spi-hdlc-adapter: INFO: sSpiDuplexFrameCount=3 spi-hdlc-adapter: INFO: sSpiUnresponsiveFrameCount=5 spi-hdlc-adapter: INFO: sSpiGarbageFrameCount=0 spi-hdlc-adapter: INFO: sHdlcTxFrameCount=1454 spi-hdlc-adapter: INFO: sHdlcTxFrameByteCount=2908 spi-hdlc-adapter: INFO: sHdlcRxFrameCount=884 spi-hdlc-adapter: INFO: sHdlcRxFrameByteCount=3875 spi-hdlc-adapter: INFO: sHdlcRxBadCrcCount=0
SIGUSR2 will clear the counters.