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),以保障高速传输时的信号完整性。
T113 SPI时钟树与引脚复用架构 APB时钟源 100/150 MHz 时钟分频器 2~65536分频 SPI控制器 SCLK生成 引脚复用矩阵 SCLK / MOSI MISO / CS 功能号选择 物理引脚 PB2~PB5 GPIO复用 说明:SCLK频率 = APB_CLK / (2 × (DIV+1)) 引脚复用通过pinctrl节点配置function = "spi0"

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占用率。

SPI DMA传输数据流 系统内存 TX Buffer RX Buffer DMA控制器 TX通道 RX通道 SPI控制器 TX FIFO RX FIFO DMA请求 数据写入 数据读取 DMA完成 DMA传输流程: 1. CPU配置DMA源地址(内存TX Buffer)、目的地址(SPI_TXD寄存器)、传输长度 2. DMA控制器向SPI发送DMA请求,SPI响应后开始数据搬运 3. 接收方向类似:SPI_RXD寄存器 -> DMA -> 内存RX Buffer 4. 传输完成后DMA触发中断,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片选信号应尽量短且远离高频信号,避免误触发。