Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
spi [2018/09/14 20:58]
midas_zhou
spi [2019/03/10 22:27] (current)
Line 5: Line 5:
  
 3.可以在C语言环境下进行spi配置和传输操作,​ 先打开 /​dev/​spidev32766.1设备节点,​ 然后用ioctl()函数来进行操作. 3.可以在C语言环境下进行spi配置和传输操作,​ 先打开 /​dev/​spidev32766.1设备节点,​ 然后用ioctl()函数来进行操作.
-比如: 用 ioctl(fd,​SPI_IOC_WR_MODE,​ &​spi_mode) 对spi的工作模式进行配置,​用ioctl(fd,​SPI_SPI_IOC_WR_MAX_SPEED_HZ, &​spi_speed) 对时钟频率进行设置,  ​+比如: 用 ioctl(fd,​SPI_IOC_WR_MODE,​ &​spi_mode) 对spi的工作模式进行配置,​用ioctl(fd,​SPI_IOC_WR_MAX_SPEED_HZ, &​spi_speed) 对时钟频率进行设置,  ​
  ​最后用ioctl(fd,​ SPI_IOC_MESSAGE(n),​ xfer)函数来发送和接收数据. 由于是半双工方式,​ 因此xfer[n].rx_buf和xfer[n].tx_buf中只有一个有效,​ 默认.tx_buf 或.rx_buf 为NULL的那个无效. 每次ioctl进行SPI_IOC_MESSAGE传输操作的发送和接收字段总长不能超过36bytes(这个正好是spi硬件的最大buffer),​ 比如SPI_IOC_MESSAGE(4)如果是3次有效发送+1次有效接收,​ 那么这些发送和接收的字段总长不能超过36bytes,​ 不然ioctl会返回错误.  ​最后用ioctl(fd,​ SPI_IOC_MESSAGE(n),​ xfer)函数来发送和接收数据. 由于是半双工方式,​ 因此xfer[n].rx_buf和xfer[n].tx_buf中只有一个有效,​ 默认.tx_buf 或.rx_buf 为NULL的那个无效. 每次ioctl进行SPI_IOC_MESSAGE传输操作的发送和接收字段总长不能超过36bytes(这个正好是spi硬件的最大buffer),​ 比如SPI_IOC_MESSAGE(4)如果是3次有效发送+1次有效接收,​ 那么这些发送和接收的字段总长不能超过36bytes,​ 不然ioctl会返回错误.
  • Last modified: 3 months ago
  • (external edit)