SPI通信原理与异步方案介绍(RH850)

一、SPI工作原理

SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器

78e78a586d3941f1a4a02cc84c3d2bfa.png

关于SPI协议,那么我们理解一句话即可。SPI的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

主机与从机连接关系图

4daeea3cc0104c7696bf25d62289220c.png

RH850/P1x-C SPI组成

RAM数据通过内部数据总线P_Bus向CSIH模块传输数据

  • CSIHnTX0W寄存器写数据接口

  • CSIHnRX0W寄存器读数据接口

  • CSIHnCFGx配置CSIH接口(波特率,奇偶校验,数据方向,数据长度,时间参数等)

  • CTL0/1/2 MCTL0/1/2控制寄存器

配置好CSIH后,RAM向TX0W中写入数据,CSIH自动将数据加载到移位寄存器中,并根据配置好的时钟,波特率,向MOSI上发送数据

同时,MISO将接收到的数据放到移位寄存器后面,当发送完16bit数据后也接收到了16bit数据,这时CSIH将移位寄存器的值复制到RX0W中,RAM可通过RX0W读取接收到的数据

  • CSIH提供一个128 words的RAM空间,4路SPI通道共用(1word = 32bit+7bit ECC)

  • 63b96cff5797430190adbc63cf5aa9de.png

    二、SPI工作模式

    1.Direct access mode直接访问

    直接绕过CSIH提供的RAM区,当数据写入TX0W寄存器时,数据直接复制到移位寄存器中

  • ad7b430e97434fad9e50e0a561e26575.png

    2.Memory Mode

    使用CSIH提供的RAM空间

375a953aadc34b85b76280deae3ab04e.png

根据操作方式不同又可分为3种

  1. FIFO Mode

  • 将数据写入CSIHnTX0W不用等待数据发送完成,可立即写入下一个数据,可以一直把FIFO写满

  • 当接收到一帧数据后,会用接收到的数据覆盖原来发送数据位置

  • 可通过CSIHnRX0W读取数据,读取一次后,FIFO指针自动移动到下一个数据,可以一直读完

  1. Dual buffer mode

  • 把128words的RAM空间氛围两份,一份64words

  • 一份只负责存放发送数据,一份只负责存放接收数据

  1. Transmit-only buffer mode

  • RAM空间只存放发送数据,接收数据不放到RAM中,只能从CSIHnRX0W读取

三、SPI发送数据长度

  • 由于CSIHnTX0W / CSIHnRX0W和移位寄存器的数据长度只有16bit所以一次性最多只能发送16位数据9916cdfc3c2a4de99561fb9fd3dbcbe6.png

  1. 2~16bit Data length

当数据长度在2~16bit时,在发送过程中不需要修改配置,只要将数据发送到CSIHnTX0W 即可

  1. Data length greater than 16 bits

  • 需要使能扩展数据长度位EDL is enabled by setting bit CSIHnCTL1.CSIHnEDLE to 1

  • CSIHnTX0W寄存器CSIHnEDL为表示这一块数据后是否还有数据(1有/0无)

  • 当CSIHnTX0W.CSIHnEDL= 1时发送16位数据,CS不变

  • 当CSIHnTX0W.CSIHnEDL= 0时发送CSIHnCFG0.CSIHnDLS[3:0]配置的数据长度,发送完成后CS拉高

Example

Example for sending 40-bit data (123456789AH) to CS0:

40 bits are split 2 × 16 bits plus 8 bits.

• Initialize CSIHnCFG0.CSIHnDLS0[3:0] = 8.

• To send 123456789AH with MSB first, write the following sequence to CSIHnTX0W:

– 20FE 1234H (CSIHnTX0W.CSIHnEDL = 1)

– 20FE 5678H (CSIHnTX0W.CSIHnEDL = 1)

– 00FE 009AH (CSIHnTX0W.CSIHnEDL = 0)

The following figure illustrates the timing.

77290dfb1c1c44bbb031c2aa522c811b.png

四、SPI传输数据格式(大小端,略过)

LSB

MSB

五、SPI中断

1. CSIHTIC (communication interrupt)发送数据中断

FIFO模块:发送指定数据的数据后产生中断

Direct access: 每一次数据发送完成后

e6a07ab888494b32a7d11044ea537ae0.png

2. CSIHTIR (communication interrupt)接收数据中断

FIFO模块:接收指定数据的数据后产生中断

Direct access: 每一次数据接收完成后

424da50c197b40138c8993834db247e9.png

3. CSIHTIRE (error interrupt)错误中断69e89a8e7a5a43d7b77aff04e6b69699.png

  • 4.CSIHTIJC (job completion interrupt)job完成中断

JOB模式开启CSIHnCTL1.CSIHnJE

Job完成后产生中断CSIHnTX0W.CSIHnEOJ = 1

Job中断产生后会替代掉CSIHTIC 中断

8f5efd4c500e48a396590e448feffec2.png六、SPI方案

  1. 方案1:Direct access + 同步传输99d5d7e9ff15413383f06e40cb4ee456.png

  2. 方案2:FIFO+异步传输+ISR82838d4a645b44edb4ef90b5028b1bf5.png

  3. 方案3:FIFO+异步传输+DMA+ISR5e56e30719cd45f7885278d65833062f.png

七、操作方法

1. Davinci SPI模块配置

SpiJobs: Hw Unit Synchronous配置为ASYNCHRONOUS

SpiMemoryMode:内存模式选择FIFO_MODE

SpiGeneral:使能异步通信

2. SPI接收中断注册

  1. 中断源选择INTCSIHnTIR,接收信号中断

4e97cde2bb0b4e62a3c3361841ad70b7.png

3. 调用方式

在初始化中使用死等,异步的polling模式模拟同步进行通信

在周期化调用中,使用异步发送,中断接收的模式,节省CPU负载

 

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林某某..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值