转发:ARM®mbed OS入门开发(五)SPI
本帖最后由 anywill 于 2016-10-10 10:35 编辑ARM®mbed OS入门开发(五)SPI2016-10-05 Summerain 小白学嵌入式
【七】Serial communications with SPI
1. mbed SPI master library functions(SPI主机库函数)//建立SPI master连接到SPI通信引脚,如果不手动设置格式和频率的话,默认是8bits, mode=0, 频率1MHzSPI(PinName mosi, PinName miso, PinName sclk, PinName _unused=NC);
//设置SPI工作的传输模式和传输一帧的比特数,mode取值为0-3,bits取值为4-16void format(int bits, int mode = 0);
//设置SPI bus clock frequency
void frequency(int hz = 1000000);
//SPI master向Slave发送数据,返回Slave的返回值virtual int write(int value);
2. SPI master应用过程:
1. SPI初始化,包括工作模式format,工作频率frequency;
频率要根据从机设备slave device (最高70 MHz)
2. SPI主机的收发
1)主机将从机片选信号(CS) 拉底至0 V
2)接着,主机通过SCLK,传输时钟脉冲,表明数据将要被传输
3)同时,主机通过MOSI发送数据,同时从机通过MISO返回数据
3. SPI Master读写操作:之前提到,如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节(Dummy Byte)来引发从机的传输。当主机发送一个连续的数据流时,有些外设能够进行多字节传输。多数具有SPI接口的存储芯片就以这种方式工作。在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平。
下面以Bosch BMP280传感器为例:根据Datasheet所述:(1) SPI 模式:
[*]BMP280的SPI支持两种传输模式:模式0和模式3。
[*]寄存器地址的最高位MSB指示SPI读写操作,其中,0表示写寄存器,1表示读寄存器。7位的寄存器地址与最高位的读写控制bit组成了控制字Control Byte. (The control byte consists of the SPI register address (= full register address without bit 7) and the write/read command.)
SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
DigitalOut CS(SPI_CS);
(2)SPI写操作流程:拉低片选,Set CS low: CS=0;
发送写控制字,Send Write_Control byte: spi.write(regAddr & ~0x80);
发送要写的数据,Send Data byte: spi.write(data);拉高片选,Set CS high: CS=1。其中,片选有效后,发送一个Control byte, 写一个Data byte,然后发送地址增加1后的下一个Control byte, 写Data byte。可以一直写,直到结束然后将CS拉高。
(3)SPI读操作(4线SPI为例):Set CS low: CS=0;Send Read_Control byte:spi.write(regAddr | 0x80);发送空字节,引发传感器传输,读取返回值:Send Dommy byte:
data=spi.write(0x00);Set CS high: CS=1。其中,片选有效后,先发送一个Control byte,而后每发送一个空字节,寄存器地址会自动增加1,读取返回值。直到结束将CS拉高
作者微信 先占位:$ 顶一下,,,,,,,, 支持楼主 很不错的帖子,感谢分享。 不错的教程
页:
[1]