4. 全志T113 SPI控制器硬件特性:寄存器布局、时钟与引脚复用、FIFO与DMA支持
在全志T113平台上,SPI控制器作为高速串行通信的核心外设,其硬件特性直接决定了驱动开发的复杂度和性能上限。本章将深入剖析T113 SPI控制器的寄存器布局、时钟树与引脚复用逻辑、FIFO与DMA传输机制,为后续的设备树配置和驱动移植打下坚实的硬件基础。
4.1 SPI控制器寄存器布局
T113 SPI控制器内部包含一组功能明确的寄存器,用于控制传输模式、数据收发、状态查询和中断管理。每个SPI控制器(SPI0/SPI1/SPI2)拥有独立的寄存器基地址,寄存器偏移量一致。
| 偏移地址 | 寄存器名称 | 功能描述 |
|---|---|---|
| 0x00 | SPI_CTL | 控制寄存器:主从模式、时钟极性(CPOL)、时钟相位(CPHA)、LSB/MSB、软复位 |
| 0x04 | SPI_CFG | 配置寄存器:时钟分频系数、SPI模式选择、采样边沿调整 |
| 0x08 | SPI_FIFO_CTL | FIFO控制寄存器:FIFO复位、触发阈值设置、FIFO使能 |
| 0x0C | SPI_FIFO_STA | FIFO状态寄存器:FIFO空/满标志、已用字节数、溢出错误 |
| 0x10 | SPI_TXD | 发送数据寄存器:写入待发送数据(32位对齐) |
| 0x14 | SPI_RXD | 接收数据寄存器:读取已接收数据(32位对齐) |
| 0x18 | SPI_INT_CTL | 中断控制寄存器:TX/RX中断使能、FIFO阈值中断、传输完成中断 |
| 0x1C | SPI_INT_STA | 中断状态寄存器:各中断源标志位,写1清除 |
| 0x20 | SPI_DMA_CTL | DMA控制寄存器:DMA请求使能、TX/RX DMA通道选择、突发长度 |
| 0x24 | SPI_DMA_STA | DMA状态寄存器:DMA传输状态、剩余字节数 |
| 0x28 | SPI_WAIT | 等待控制寄存器:片选等待周期、帧间隔时间 |
寄存器操作要点:SPI_TXD和SPI_RXD寄存器必须按32位字对齐访问。当FIFO深度为64字节时,单次写入少于4字节的数据需左对齐填充,否则可能导致数据错位。
4.2 时钟与引脚复用
T113 SPI控制器的时钟源来自APB总线时钟(通常为100MHz或150MHz),通过内部分频器产生SPI串行时钟(SCLK)。时钟分频系数在SPI_CFG寄存器中配置,支持2~65536分频。
时钟计算公式: SCLK = APB_CLK / (2 × (SPI_CLK_DIV + 1)),其中SPI_CLK_DIV为12位分频值,取值范围0~4095。
引脚复用方面,T113的SPI接口信号(SCLK、MOSI、MISO、CS)与GPIO功能共享引脚。以SPI0为例,其引脚复用关系如下:
| 功能信号 | GPIO引脚 | 复用功能号 | 默认上拉状态 |
|---|---|---|---|
| SPI0_SCLK | PB2 | 功能2 | 无上拉 |
| SPI0_MOSI | PB3 | 功能2 | 无上拉 |
| SPI0_MISO | PB4 | 功能2 | 无上拉 |
| SPI0_CS | PB5 | 功能2 | 上拉使能 |
引脚复用配置陷阱:设备树中pinctrl节点必须同时配置引脚复用功能和驱动能力。CS引脚必须使能内部上拉,否则在空闲状态可能出现片选误触发。驱动能力建议设置为3级(8mA),以保障高速传输时的信号完整性。
4.3 FIFO与DMA支持
T113 SPI控制器内置64字节发送FIFO和64字节接收FIFO,支持硬件流控和阈值中断。FIFO机制有效降低了CPU的干预频率,提升了数据传输效率。
4.3.1 FIFO工作模式
| 模式 | 触发条件 | 适用场景 |
|---|---|---|
| 轮询模式 | CPU循环检查FIFO状态寄存器 | 小数据量(<64字节)、低速率传输 |
| 中断模式 | FIFO达到预设阈值触发中断 | 中等数据量(64~1024字节)、实时性要求一般 |
| DMA模式 | DMA控制器自动搬运FIFO数据 | 大数据量(>1024字节)、高速率传输 |
FIFO阈值配置建议:发送FIFO阈值设置为32字节(半满),接收FIFO阈值设置为32字节。这样可以在中断服务程序中批量处理数据,减少中断响应次数。
4.3.2 DMA传输机制
T113 SPI控制器支持两个独立的DMA通道:一个用于发送(TX DMA),一个用于接收(RX DMA)。DMA传输无需CPU逐字节干预,大幅降低CPU占用率。
4.3.3 DMA配置关键参数
在设备树中启用DMA支持时,需要配置以下关键参数:
spi0: spi@04011000 {
compatible = "allwinner,sun8i-t113-spi";
reg = <0x04011000 0x1000>;
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
clock-names = "ahb", "mod";
resets = <&ccu RST_BUS_SPI0>;
dmas = <&dma 1>, <&dma 0>;
dma-names = "rx", "tx";
status = "disabled";
};
DMA通道分配规则:dmas属性中第一个通道为接收(rx),第二个通道为发送(tx)。通道编号0~3对应DMA控制器内部的不同硬件通道,需参考T113数据手册确认具体映射关系。
4.4 硬件特性总结
| 特性 | 参数 | 说明 |
|---|---|---|
| SPI控制器数量 | 3个(SPI0/SPI1/SPI2) | SPI0和SPI1支持DMA,SPI2仅支持中断模式 |
| 最大SCLK频率 | 50MHz | 受限于APB总线时钟和信号完整性 |
| FIFO深度 | 64字节(TX/RX独立) | 支持阈值中断和DMA触发 |
| DMA通道 | 2个(TX+RX) | 仅SPI0和SPI1支持 |
| 支持SPI模式 | 模式0/1/2/3 | 通过CPOL和CPHA组合配置 |
| 数据位宽 | 8位/16位/32位 | 通过SPI_CFG寄存器配置 |
硬件设计注意事项:当SPI时钟频率超过30MHz时,建议在PCB布局中为SCLK、MOSI、MISO信号线添加串联电阻(22Ω~33Ω),以抑制过冲和振铃。同时,CS片选信号应尽量短且远离高频信号,避免误触发。