通讯协议

LPC协议

上次初步介绍了LPC总线协议,以及CPU是如何通过LPC访问EC的。这次主要总结下LPC完整通讯流程和时序。

通讯流程与时序

LPC是一个同步协议,所有的信号采样都在LCLK的上升沿。通讯以“Cycle(周期)”为单位。

cycle示意流程图 :

cycle示意流程图
想了解更深可以参考以下文档:
Intel LPC Interface Specification

一个典型的I/O读写周期包含以下阶段:

1、Start(1 clock): 主设备(CPU/PCH)将LFRAME#拉低,并在LAD[3:0] 上输出开始状态0000,表示一个周期的开始。当FRAME#信号有效时,所有的外设都要监视LAD[3:0]信号。

2、Cycle Type/Dir (1 clock): 告知是读还是写,以及访问类型(I/O, Memory, DMA),LAD[0]在该场中被保留,作为外设应该忽略。

3、Address (8 clocks):Memory访问:32 位地址,占用 8 时钟;I/O访问:16 位地址,占用 4 时钟

4、TAR (Turn-around, 2 clocks): 交换总线的控制权,这是“换手”阶段,防止两个设备同时驱动总线导致短路,谁需要交还控制权,谁驱动LAD [3:0]保持1111。

5、SYNC (Variable): 等待从设备响应。在target或者DMA传输操作时,Sync由外设驱动;在bus master操作时,Sync由Host驱动。外设未就绪时可插入等待,准备好后回复0000表示就绪。

6、Data (2 or 8 clocks): 传输数据。如果是写,由主设备驱动;如果是读,由从设备(EC)驱动。

以下列表中Bits[3:0]表示LAD[3:0]位变化
Start状态定义:

Cyctype IR状态定义:

Sync状态定义:

通讯示例

Memory 读写时序参考:

内存读写先后顺序解答,从左往右看:

  • 主机把LFRAME#低,LAD按照上面start信号控制,如memory读010x.
  • 主机传32位I/O地址
  • 主机释放总线,给设备
  • 从机如果就绪=0000/等待=0101
  • 从机开始读写数据
  • 从机释放总线,给主机
  • 主机开始LFRAME#高

总结

本文重点讲解LPC 协议的周期结构、信号含义、I/O 读写时序,配合时序图与流程图,可快速理解其工作原理。因为LPC现在比较成熟,厂商已提供成熟驱动与代码,以上了解即可。

下次我应该还会从寄存器、端口访问到完整驱动代码,分享一些CPU与EC的LPC通信实战调试内容。