FT2232H是FTDI chip在2012年发布的一款高速USB转串行通信的协议转换芯片。作为第五代USB协议转串行总线通信协议的芯片,完全符合USB2.0规范(480Mb/s)并且可以依靠编程的方式配置成为串行或者并行的其他总线接口规范。这对于在进行嵌入式教学是的传感器总线仿真是非常方便的,甚至可以作为嵌入式教学中的调试工具使用。具体的芯片介绍可以参考官方资料(DS_FT2232H),这里笔者只举一个编程实现I2C总线通信的例子,来说明FT2232H的使用。
一、MPSSE简介
在用户程序使用Multi Protocol Synchronous Serial Engine (MPSSE)作为实现三个较常见的串行总线(SPI、I2C和JTAG)的中间件。MPSSE实际上是一个函数库,封装了实现不同协议的流程化操作,用户程序可以通过调用这些函数,来实现和D2XX Driver的数据交换,而D2XX在逻辑上直接驱动FT2232H芯片。实际上程序也可以直接调用D2XX中的函数,来直接实现所需的协议规范。
图 MPSSE所处的位置
如上图所示,MPSSE提供了三种类型的API来分辨实现I2C、SPI和JTAG,在使用的使用下载相应的函数库就可以了。官网提供了Linux和Windows的版本
http://www.ftdichip.com/Support/SoftwareExamples/MPSSE.htm
图 系统结构
在上图中,Host可以使PC或者是嵌入式系统给,通过FT2232H桥接到I2C总线。作为示例,图中只有一个I2C设备,在实际应用中,在I2C总线上的设备可能不止一个,这就需要在使用的时候配置FT2232H的I2C地址。
libMPSSE-I2C的函数库文件结构如下,在使用是只需将inlcude和lib文件夹下的windows\i386下的内容拷贝到工程文件夹中,如下图所示:
图 libMPSSE-I2C的目录结构
图 添加后的文件组成
另外,还需在Visual Studio的工程中添加对Lib的依赖,如下图:
libMPSSE-I2C可以分为两个部分,其一为五个控制函数;其二为两个数据传输函数。所有的API都返回FT_STATUS宏(FT_STATUS在D2XX Driver中的定义)。
二、被控制的I2C器件的时序和函数参数
被控制(访问)的I2C设备,在本文中选用的是DIP封装的老款24C128(I2C接口的128K EEPROM),新款的型号是24C128C,引脚(A0-A3在设备寻址是稍有不同,老款只使用A0-A1两个引脚),这里只说明24C128的设备寻址。
图 24C128的引脚和引脚说明
图 设备寻址是8位地址的组成
在使用时,高5位是不变的,在使用时只需配置A1-A0和LSB(读写标志位)即可。当只对一片24C128操作时,A1=A0=0。在进行写操作时,务必使WP接地或者悬空。在使用FT2322H访问I2C设备时,只要求地址为0B0101000(七位,最后一位不用写)。 具体的寻址请参考AT24C12