【数据寄存器】SPI通信协议中文版( 四 )


1.4.2 从机模式
当SPI控制寄存器1的MSTR位清除时 , SPI工作在从机模式 。
· SCK时钟
在从机模式下 , SCK是来自主机的SPI时钟输入脚 。
· MISO与MOSI引脚
在从机模式下 , 串行数据输出脚(MISO)和串行数据输入脚(MOSI)的功能由SPI控制寄存器2的SPC0和BIDIROE控制位决定 。
· SS引脚
SS脚是从机选择输入 。在数据传输开始前 , 从机的SS脚必须为低电平 。SS必须保持低电平 , 直到数据传输完成 。如果SS变为高电平 , SPI将被迫进入空闲模式 。
SS输入也控制着串行数据输出脚 , 如果SS为高电平(未选择) , 串行数据输出脚为高阻抗 , 如果SS为低电平 , SPI数据寄存器的第一位被从串行数据输出脚输入 。同时 , 如果未选择从机模式(SS为高电平) , SCK输入被忽略 , 不会发生SPI位移寄存器内部位移 。
虽然SPI能够进行双工操作 , 一些SPI外设也只能在从机模式下接收数据 。更简单的设备是没有串行输出脚的 。
注意
当外设具备双工能力时 , 注意不要同时使能两个串行输出驱动同一数据输出线的接收设备 。
只要驱动同一数据输出线的设备不超过一个 , 那么多个从机同时接收相同主机传输的数据是可能的 , 虽然此时主机是无法接收所有从机返回信息的 。
如果SPI控制寄存器1的CPHA位被清除 , SCK输入时钟的奇数边沿锁存串行数据输入引脚的数据 。偶数边沿将先前从串行数据输入引脚锁存的值转移到SPI移位寄存器的LSB或MSB中 , 这取决于LSBFE位 。
如果CPHA位被置起 , SCK输入时钟的偶数边沿锁存串行数据输入引脚的数据 。奇数边沿将先前从串行数据输入引脚锁存的值转移到SPI移位寄存器的LSB或MSB中 , 这取决于LSBFE位 。
当CPHA被置起 , 第一个边沿用于获取串行数据输出线的第一个数据 。当CPHA被清除并且SS输入为低电平(选择从机) , SPI数据的第一个为被驱动输出到串行数据输出位 。8个位移完成后 , 视为传输结束并且被转移到SPI数据寄存器中 。SPI状态寄存器中的SPIF被置起时表示传输完成 。
注意
在从机模式中 , 更改CPOL, CPHA, SSOE, LSBFE, MODFEN, SPC0与BIDIROE(SPC0置起)将会中止当前传输 , 必须避免这种情况 。
1.4.3 传输格式
在SPI传输期间 , 数据同时发送(连续移出)和接收(连续移入) 。串行时钟(SCK)同步移位并在两条数据线上采样 。从机选择线用来选择一个从机设备 , 未选择的从机设备不会干扰SPI总线活动 。在主机设备上 , 从机选择线可用于表示多主机总线争用 。
【数据寄存器】SPI通信协议中文版
文章图片

文章图片

图1-8 主机/从机传输框图
1.4.3.1 时钟相位与极性控制
通过SPI控制寄存器1的2个位 , 软件可以选择4种时钟相位与极性组合的一种 。
CPOL时钟极性位指定时钟的高电平或低电平有效 , 不会影响传输格式 。
CPHA时钟相位控制位选择两种传输格式的一种 。
主机与从机相连的设备 , 时钟相位与极性应当相同 。在一些情况下 , 在传输之间改变相位和极性 , 以允许主设备与具有不同要求的外围从机通信 。
1.4.3.2 CPHA = 0 传输格式
SCK线的第一个边沿用于记录从机传给主机的第一个数据位以及主机传给从机的第一个数据位 。在一些外设中 , 从机数据输出线上的第一位数据在从机被选择后就是有效的 。这种格式中 , SCK边沿在SS转为低电平后的半个周期后发出 。
SCK半个周期后 , 第二个边沿出现在SCK线上 。当第二个边沿发出时 , 前一次从串行数据输入脚锁存的值被移入移位寄存器的LSB或MSB中 , 这取决于LSBFE位 。
在第二边沿之后 , SPI主机数据的下一位输出到主机的串行数据输出脚 , 发送给从机的串行数据输入脚 。这种过程在SCK线上持续16个边沿 , 数据在奇数边沿被锁存 , 在偶数边沿被移位 。


推荐阅读