Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SPI(8)			     System Manager's Manual			  SPI(8)

NAME
     spi -- communicate on SPI bus with slave devices

SYNOPSIS
     spi [-A] [-b] [-L] [-v] [-C command-bytes] [-c count] [-d r|w|rw]
	 [-f device] [-m mode] [-s max-speed]
     spi [-i] [-v] [-f device]
     spi [-h]

DESCRIPTION
     The  spi utility can be used to perform raw data transfers (read, write, or
     simultaneous read/write) with devices on the SPI bus, via the spigen(4) de-
     vice.

     Each spigen(4) device is associated with a specific "chip select" (cs)  pin
     on  the  spibus, and therefore needs to be specified.  If no device name is
     specified on the command line, spi assumes "spigen0.0".

     For more information on the spigen device, see spigen(4).

     The options are as follows:

     -A 	Specifies ASCII mode.  Both read and write  data  is  input  and
		output	as  2-character hexadecimal values, optionally separated
		by white space, such as 00 01 02 etc.  When combined with the -b
		flag, the data on stdin remains a sequence of ASCII  hexadecimal
		byte values, but the output reverts to binary mode.

     -b 	Binary (output) mode.  Only has an effect when -A has been spec-
		ified.	 Reverts  the output back to binary (rather than ASCII),
		while leaving the input format as-is.  Use in  combination  with
		-A to allow using something like "echo" to pass hexadecimal val-
		ues to the SPI device, but output the received data on stdout as
		binary.

     -C command-bytes
		Sends one or more command bytes, skipping any bytes read-in dur-
		ing  the  transfer.   The  byte  values should be specified as a
		quoted parameter, similar to the format for data  on  stdin  for
		-A,  that  is,	2 character hexadecimal values, optionally sepa-
		rated by white space.  An SPI device will typically require that
		a command be sent, followed by bytes of data.  You can use  this
		option to send the command without receiving any data bytes dur-
		ing the command sequence.

     -c count	The  total number of bytes to transfer as a decimal integer.  If
		a write or a read/write  transaction  is  being  performed,  and
		fewer  than this number of bytes are read in from stdin, the re-
		maining bytes will be sent with a value of "0".  If  the  length
		can  be determined from the input file size, you can use a count
		value of "-1" to base the transfer on the input file's size.

     -d r|w|rw	Transfer direction: Use r for read, w for write, and rw for  si-
		multaneous read and write.

     -f device	SPI device to use (default is /dev/spigen0).

     -h 	Print help text to stderr, explaining the command line options.

     -i 	Displays  information  about the SPI device to stderr.	Whenever
		this flag is specified, no data is read or written, and the mode
		and clock speed are not changed.

     -L 	LSB bit order.	The default is MSB, i.e., the highest order  bit
		is transmitted first.  Specifying -L caused the LSB to be trans-
		mitted and read first.

     -m 0|1|2|3
		SPI  mode, 0 through 3.  This defines the clock phase and timing
		with respect to reading and writing data, as per the SPI  speci-
		fication.

     -s speed	Specify  the  maximum  speed, in Hz, for the SPI clock.  The bus
		will operate at its highest available speed which does	not  ex-
		ceed this maximum.

     -v 	Specifies Verbose mode.  Diagnostics and information are written
		to  stderr.   You can specify -v more than once to increase ver-
		bosity.

EXAMPLES
     Here are a few examples of using the spi utility:

     *	 Get information about the default SPI device

	 spi -i

     *	 Set the maximum clock speed to 200Khz and the mode to 3  on  spigen0.1,
	 but do not transmit nor receive any data

	 spi -f spigen0.1 -s 200000 -m 3

     *	 Send  a  command  sequence consisting of 2 bytes, and read 2 additional
	 bytes from the SPI device, using the current mode and speed on the  de-
	 fault device

	 spi -d r -C "00 01" -c 2

     *	 Transmit  a byte value of 5, and receive 2 bytes, displaying their val-
	 ues as 2-byte ASCII hexadecimal, with mode 2, and a maximum clock speed
	 of 500khz.

	 echo "05" | spi -A -d rw -m 2 -s 500000 -c 2

     *	 Send a binary file, and output the SPI result through od(1) as hexadec-
	 imal bytes, using the current maximum clock speed and SPI mode.

	 spi -d rw -c -1 <input_file.bin | od -An -t x1

     *	 Send 2 bytes of data, receive a total of 4 bytes, and	output	the  SPI
	 result  as binary data, piped through od(1), displaying it as two hexa-
	 decimal unsigned short integer values.

	 echo "00 01" | spi -A -b -d rw -c 4 | od -t x2

     *	 Query the manufacturer ID and size from a standard spiflash device,  by
	 sending  the command byte 0x9f and displaying the 3-byte reply in ASCII
	 hex.

	 spi -f spigen0.0 -m 0 -s 1000000 -d r -c 3 -A -C 9f

SEE ALSO
     spigen(4)

HISTORY
     The spi utility appeared in FreeBSD 11.3.

FreeBSD ports 15.1		 August 21, 2020			  SPI(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=spi&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help