CH58x/59x SPI0讲解
前言:
SPI收发分为首字节模式和DMA收发数据模式。
首字节模式:主机发送数据长度不固定,可以将主机发送的第一个字节配置为长度。从机先接收第一个字节,然后通过DMA接收剩余的数据。
DMA接收数据:主机发送数据长度固定,从机接收数据长度固定。
产品开发,建议使用DMA收发数据。长度建议固定,不固定自行补充。
讲解:
1、流程:
- 主机发送:写数据-->DMA-->FIFO-->移位寄存器1-->MOSI线。其中数据填入DMA为手动操作完成,其余为芯片硬件完成。
- 从机接收:MISO线-->移位寄存器2-->FIFO-->DMA-->读数据。其中从DMA读数据为手动操作完成,其余为芯片硬件完成。
2、典型寄存器:
寄存器(位) | 功能 | 举例 |
RB_SPI_IF_DMA_END |
数据装载DMA完成,但是不代表数据传输完成。因为DMA是独立于SPI,所以不能代表数据已经传输完成。 接收数据,可作为接收完成标志 |
SPI从机DMA接收数据时,可通过该标志位判断数据可以进行接收。但是从机DMA发送时,该标志位置位仅代表数据填入DMA完成,但是此时数据还没有完全填入fifo或者MISO总线。需要通过RB_SPI_IF_CNT_END判断从机填入数据完成。 |
RB_SPI_IF_CNT_END |
数据传输完成 发送数据,可作为发送完成标志 |
|
R8_SPI0_CLOCK_DIV |
时钟分频系数,基于主频(默认60M) SPI主机配置,从机可不进行配置 |
分频系数为4,则SPI主频为系统主频/分频系数,即15Mhz |
3、通信方式:
CH57x/58x/59x系列芯片使用DMA只能半双工,因为FIFO方向同一时刻只能配置为输入或输出。
需要用全双工只能使用单字节,即 R8_SPI0_BUFFER。(字节传入到发送的移位寄存器时,接收的移位寄存器已经收到数据)。
补充:
SPI驱动屏幕时,驱屏的效果与分辨率有关,例如240*240的屏幕,SPI主频为30M,则对应的驱动帧数计算:30M/240/240/8/2=32帧。与屏幕的尺寸无关。如果只需要点亮屏幕,则帧数无所谓。