[关闭]
@SiberiaBear 2016-04-07T23:54:55.000000Z 字数 2069 阅读 8491

关于树莓派的SPI

raspberryPi

固定链接:https://www.zybuluo.com/SiberiaBear/note/337874


这是一篇翻译文章,翻译自https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/README.md

概述

树莓派上带有1个SPI,有两个片选引脚。
SPI主机驱动在Raspian系统上默认是关闭的,如果需要打开,可以在/etc/modprobe.d/raspi-blacklist.conf中将spi-bcm2708列入白名单,或者使用raspi-config中打开,重启或通过下列命令手动加载驱动:

  1. $ sudo modprobe spi-bcm2708

SPI总线在P1口的映射是:

F GPIO GPIO F
MOSI P1-19
MISO P1-21
SCLK P1-23 P1-24 CE0
GND P1-25 P1-26 CE1

软件

wiringPi

wiringPi包含了一个库,通过这个库可以方便的调用树莓派片载的SPI接口,直接操作硬件寄存器。

http://wiringPi.com

BCM2835 Library

这个是树莓派的C库,提供了一套操作BCM2835芯片上的GPIO和其他IO功能的途径,直接操作硬件寄存器。

Use SPIDEV from c

在Linux文档中有个SPI的测试代码,可以用来测试树莓派的SPI,通过spidev来操作SPI总线。

shell

在shell下操作:

  1. # Write binary 1, 2 and 3
  2. echo -ne "\x01\x02\x03" > /dev/spidev0.0

硬件

BCM2835有3个SPI控制器,但仅仅SPI0控制器在端口可以使用,BCM2835 ARM Peripherals的第十章介绍了这个控制器。

主机模式

信号端名称缩写:

信号 解释
SCLK 串行时钟
CE 片选
MOSI 主机输出从机输入
MISO 主机输入从机输出
MOMI 主机输出主机输入
MIMO 主机输入主机输出

标准模式

在标准的SPI主机模式下,支持3线模式。

双向模式

在双向SPI主机模式,同样的支持4线模式,但排除使用MIMO代替MISO和MOSI。

LOSSI模式(低速串行接口)

LOSSI标准允许与一些设备通信命令也可以传输数据,如LCD。LOSSI命令和参数是8位长度,但是一个额外的数据位用于预测某个字节是命令还是参数。这个额外的数据位在参数时为高电平,在命令时为低电平。最后输出的是9位数据。LOSSI通常在MIPI DBI type C兼容的LCD 控制器中使用。


在SPI中,一些命令可以触发自动读取,所以这个模式不能直接用于传输9位数据的通用SPI中。

传输模式

速率

CDIV配置决定了CLK寄存器的时钟速率:

  1. SCLK = Core Clock / CDIV
  2. If CDIV is set to 0, the divisor is 65536. The divisor must be a power of 2. Odd numbers rounded down. The maximum SPI clock rate is of the APB clock.

其中must be a power of 2写错了,应该是must be a multiple of 2

片选

当设置为DMA模式时,设置和保留时序设计到自动启动和切断CS线,
- CS 线应该在MSB模式下传输第一个字节前保留至少3个时钟周期。
- CS 线应该当传输完最后一个时钟脉冲后保留不少于1个时钟周期。

Linux 驱动

默认的linux驱动是spi-bcm2708.

速率

驱动支持如下速率:

  1. cdiv speed
  2. 2 125.0 MHz
  3. 4 62.5 MHz
  4. 8 31.2 MHz
  5. 16 15.6 MHz
  6. 32 7.8 MHz
  7. 64 3.9 MHz
  8. 128 1953 kHz
  9. 256 976 kHz
  10. 512 488 kHz
  11. 1024 244 kHz
  12. 2048 122 kHz
  13. 4096 61 kHz
  14. 8192 30.5 kHz
  15. 16384 15.2 kHz
  16. 32768 7629 Hz

当设置为24MHz是,实际上速率是15.6MHz。

支持模式位

  1. SPI_CPOL - Clock polarity
  2. SPI_CPHA - Clock phase
  3. SPI_CS_HIGH - Chip Select active high
  4. SPI_NO_CS - 1 device per bus, no Chip Select

双方向模式不被支持。

支持的数据位

传输模式

只支持中断。

弃用的功能

  1. bcm2708_spi bcm2708_spi.0: master is unqueued, this is deprecated

SPI驱动潜伏问题

DMA适合驱动

这个是spi-bcm2708的一个分支,可以允许DMA支持SPI从机驱动。

loopback test

这个程序可以测试SPI收发功能,将MOSI和MISO线直接相连接,没办法测试时钟和片选信号。
在这里:wget https://raw.github.com/torvalds/linux/master/Documentation/spi/spidev_test.c 下载程序。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注