在 MAX II CPLD 中实现 SMBus 控制器 2007 年 12 月, 1.0 版 应用笔记 502 引言 SMBus 本文档介绍 Altera MAX II CPLD 中的系统管理总线 (SMBus) 控制器 通过实例展示了 MAX II CPLD 的通用性 SMBus 作为一种 I 2 C, 是两线接口, 各种系统组成都可以通过它来进行通信 在任何时候都只有一个器件能够控制总线, 和一个从机或者多个从机进行通信 可以利用 SMBus 作为控制总线, 完成与系统和电源管理相关的任务 由于 SMBus 能够和多个设备进行通信, 因此, 可以去掉单独的控制线 这不但减少了引脚数量, 而且还保证了今后的扩展 本应用笔记所设计的控制器符合 SMBus 规范 2.0 ( 请参考 www.smbus.org/specs) 利用 MAX II CPLD 作为 SMBus 控制器 MAX II CPLD 是低成本 低功耗器件 SMBus 规范定义了两类电气特性 : 低功耗和高功耗 对于任何低功耗消费类应用, 都可以采用低功耗 SMBus, 在 MAX II CPLD 中实现 SMBus 控制器 MAX II CPLD 起到了主机 ( 例如, 微控制器或者微处理器 ) 和 SMBus ( 参见图 1) 之间桥接的作用 控制器将控制信号从主机接口发送至 SMBus 接口 所设计的控制器可用作主机或者从机 SMBus 控制器位于普通微控制器总线 ( 包括地址 数据和控制信号 ) 和 SMBus 之间 它本身是微控制器的外设, 是 SMBus 上的 SMBus 设备 ( 主机或者从机 ) Altera 公司 1 AN-502-1.0
图 1. SMBus 结构图 (ADD, DAT, CTRL) µc Altera MAX II CPLD SMBus SMBDAT SMBCLK SMBus 上的数据传送 总线上主机和从机之间的通信由四步组成 :START 从机地址 数据传送和 STOP ( 参见图 2) START 之后, 发送从机地址 只有地址和主机所传送地址相匹配的从机才对主机做出响应, 回送应答位 获得从机地址后, 开始逐字节数据传送 主机发送一个 STOP 信号, 中断通信, 释放总线 图 2. SMBus 数据传送 A: SMBDAT B: SMCLK A MSB ack ack B 1 2 7 8 9 1 2 9 START 主机和 SMBus 控制器之间的普通接口包括地址总线 数据总线和所需要的控制信号 总线接口逻辑执行的功能有主机和从机模式切换 START/STOP 信号生成 数据包误码 (PEC) 生成 R/W 模式和误码提醒等 Altera 公司 2
本设计实例具有以下特性 : 简单通用的微控制器接口 主机和从机模式工作 从主机模式自动切换到从机模式时的仲裁丢失中断 主机模式的 PEC 产生和验证 98.215 KHz 工作 主机和从机模式的时钟低频扩展 主机接口 SMBus 控制器使用异步接口, 包括以下信号, 如表 1 所示 表 1. 异步接口信号信号 连接 说明 ADDRESS BUS [8] 输入 µc 地址总线, 用于选择所需的寄存器 DATA BUS [8] 双向 µc 数据总线 IRQ 输出 中断请求 高电平有效信号 BUSY 输出 指示总线空闲还是忙 高电平有效信号 CS 输入 片选 低电平有效信号 RD 输入 将所选寄存器的数据放到数据总线上 高电平有效信号 WR 输入 将数据总线上的数据写入到所选寄存器中 高电平有效信号 RESET 输入 控制器复位信号 高电平有效信号 所有信号均为高电平有效, 只有 CS 是低电平有效 当它是高电平时, 所有其他线都进入三态, 除 IRQ ( 中断请求 ) 之外 表 2 列出了各种寄存器及其对应地址 表 2. 寄存器 A1 A0 所选择的寄存器 1 1 地址寄存器 0 0 数据寄存器 1 0 状态寄存器 A1 和 A0 是 8 位地址总线的最后两位,A0 是 LSB 总线的其他 6 位都是零 ( 如果需要, 可以改变 ) Altera 公司 3
地址寄存器 地址寄存器是 8 位寄存器, 存储控制器从机模块的地址 因为地址只有 7 位, 因此采用 LSB 来使能或者禁止控制器 如果 LSB 被置位, 控制器被使能 如果对其清位, 控制器即使探测到地址已经发送到总线上时, 也不会做出响应 ( 表 3) 表 3. 地址寄存器位 名称 说明 7..1 从机地址 控制器地址 ( 从机模式 ) 0 使能 / 禁止 如果置位, 使能控制器 数据寄存器 数据寄存器含有向 SMBDAT 线写入或者从该线读取的数据 它用于将数据从 SMBDAT 线传送到主机, 反之亦然 ( 表 4) 表 4. 数据寄存器 位名称说明 7..0 数据寄存器 SMBus 数据 状态寄存器 状态寄存器含有将要进行的操作的状态信息 表 5 对状态寄存器位进行了说明 表 5. 状态寄存器位 位 名称 置位 说明 清位 7 AM 当从机模式中地址匹配时, 被 SMBus 控制器置位 6 DTE 如果只在从机模式下不能传送数据, 被 SMBus 控制器置位 在从机模式中的操作完成后, 被 SMBus 控制器清位 在下一主机 / 从机操作之前, 被主机清位 5 AL 仲裁丢失 正常操作 4 M/S SMBus 控制器用作主机 SMBus 控制器用作从机 3 R/W 使 SMBus 控制器从 SMBDAT 读取数据 使 SMBus 控制器将数据写入 SMBDAT Altera 公司 4
表 5. 状态寄存器位 位 名称 置位 说明 清位 2 PEC 如果从机 PEC 使能, 只在主机模式下 置位 被微控制器清位 1 STOP 产生停止状态 正常操作 0 START 产生启动状态 正常操作 如果微控制器产生了 STOP, 那么状态寄存器被清位 只有状态寄存器中的第 4 位到第 0 位可以被主机写入 主机不应改变其他位的数值 表 5 中列出的所有寄存器都可以进行读写操作 SMBus 控制器通信 当主机希望和控制器进行通信时, 它应该首先读取状态寄存器, 确定控制器当前的状态, 如果需要, 写入该寄存器, 然后是其他寄存器 图 3 ( 写周期 ) 和图 4 ( 读周期 ) 所示为主机和控制器通信时必须遵从的顺序 写周期 : 1. 将 CS 置为低电平 2. 把所需寄存器的地址放到地址总线上 3. 将数据放到数据总线上 4. 置位 WR, 在最短的时钟间隔周期内写入控制器 (5.5MHz) Altera 公司 5
图 3. 写周期 CS ADDRESS BUS DATA BUS t su :min WR t HD :min RD 读周期 : 1. 将 CS 置为低电平 2. 将所需的寄存器地址放到地址总线上 3. 置位 RD, 从数据总线读取数据 读 / 写操作总是需要读 / 写整个寄存器 不能进行单比特操作 Altera 公司 6
图 4. 读周期 CS ADDRESS BUS t su :min RD DATA BUS WR 下面介绍了使用状态寄存器的一个典型实例 : 如果主机希望配置主机模式控制器进行读操作, 并且使能了 CRC 校验, 它将置位状态寄存器的 START PEC R/W 和 M/S 位 总线上传送的数据第一字节 ( 与之通信的从机地址 ) 被写入到数据寄存器中 然后, 控制器将数据串行输出至 SMBDAT 线 接收到应答信号后, 它读取一个字节的数据, 中断主机, 而主机现在应该从数据寄存器读取数据 如果没有读取数据, 控制器等待大约 32 微秒的时间, 置位 IRQ 和 busy_bus 当主机希望控制器在读取一个字节的数据后产生停止信号, 主机将状态寄存器的 STOP 位置位 即, 如果状态寄存器的 STOP 位被置位, 并且 PEC 被置位, 读取两个字节后, 产生 STOP 信号 如果 PEC 没有置位, 读取一个字节的数据后, 产生 STOP 信号 在主机模式下, 出现 IRQ 后, 控制器等待大约 32 微秒的时间, 以便主机做出响应 出现以下状态时, IRQ 变为高电平 : 在主机写模式下 : 如果写入到数据寄存器的数据字节被成功传送, 向主机发送指示信号, 可以将下一字节写入数据寄存器 如果没有收到从机对所传送数据的应答 如果丢失仲裁 在 PEC 置位模式下, 即使 STOP 位被置位, 也出现 IRQ, 表明来自从机的 PEC 和控制器产生的 PEC 不匹配 Altera 公司 7
在主机读模式下 : 对于 SMBDAT 线上传送的地址字节, 如果没有收到任何从机的应答信号 如果收到来自从机的一个数据字节, 向主机发出指示, 读取字节 如果仲裁丢失 在从机模式 ( 该控制器不支持从机模式下的时钟低频扩展 ) 下 : 如果来自主机的地址和地址寄存器中的数据相匹配 如果 SMBDAT 线上的数据字节读写操作完成, 向主机发出指示信号 忙信号说明 : 如果置位, 忙信号表明数据在 SMBDAT 线上传送 如果 IRQ 被置位, 忙信号为低电平, 表明当前模式正确进行, 没有任何错误 如果 BUSY 信号为低电平, 没有进行任何操作, 表明 SMBus 上没有任何活动 ( 即, SMBus 空闲 ) 如果 IRQ 和忙信号一起置位, 表明当前操作失败 原因有以下几点 : 在主机模式下 : 没有收到从机的应答信号 仲裁丢失 IRQ 置位后, 主机响应时间超过了 32 微秒 ( 大约 ) 主机读模式下收到的 PEC 和控制器计算的 PEC 不符 在从机模式下 : 在从机写模式下, 没有收到应答信号 IRQ 置位后, 主机没有在 SMBCLK 线上最短时钟周期内做出响应 探测到 SMBus 上有 STOP 信号 设计实现 源代码 可以采用 EPM1270 来实现本设计 设计源代码编译后被编程至 MAX II CPLD 主机接口和 SMBus 线被映射至普通 I/O 引脚 本设计实例采用了 Verilog HDL 来实现, 成功地运行在辅助测试台上 下面的链接提供源代码 测试台文件以及完整的 Quartus II 工程 : www.altera.com/literature/an/an502_design_example.zip Altera 公司 8
结论 正如本设计实例所示, MAX II CPLD 是实现 SMBus 控制器非常好的选择 它具有低成本 低功耗特性, 内核和 I/O 块能够承受任意上电顺序, 是这类应用的理想选择 其他资源下面列出了其他资源 : MAX II CPLD 主页 : www.altera.com/products/devices/cpld/max2/mx2-index.jsp MAX II 器件资料 : www.altera.com/literature/lit-max2.jsp MAX II 关断设计 : www.altera.com/support/examples/max/exm-power-down.html MAX II 应用笔记 : AN 428:MAX II CPLD 设计指南 AN 422: 利用 MAX II CPLD 实现便携式系统的功耗管理 版本历史 表 6 列出了本应用笔记的版本历史 表 6. 版本历史 日期和版本进行的改动总结 2007 年 12 月, 1.0 版初次发布 Altera 公司 9
101 Innovation Drive San Jose, CA 95134 www.altera.com Literature Services: literature@altera.com 版权 2007 Altera 公司 保留所有版权 Altera 可编程解决方案公司 程式化 Altera 标识 专用器件名称和所有其他专有商标或者服务标记, 除非特别声明, 均为 Altera 公司在美国和其他国家的商标和服务标记 所有其他产品或者服务名称的所有权属于其各自持有人 Altera 产品受美国和其他国家多种专利 未决应用 模板著作权和版权的保护 Altera 保证当前规范下的半导体产品性能与 Altera 标准质保一致, 但是保留对产品和服务在没有事先通知时的升级变更权利 除非与 Altera 公司的书面条款完全一致, 否则 Altera 不承担由此处所述信息 产品或者服务导致的责任 Altera 建议客户在决定购买产品或者服务, 以及确信任何公开信息之前, 阅读 Altera 最新版的器件规范说明 10 Altera 公司