这两天在调试一款新的硬件平台,它采用的MCU依然是S3C2410。该平台新增了一个RTC模块,采用的芯片是DS1337。这是一个IIC接口的时钟芯片。在开始调试时碰到了一些问题,MCU始终无法与DS1337通讯,走了些弯路,浪费了不少时间。后来发现是IIC的SDA和SCL接反了。为了以后能方便调试2410下的IIC设备,所以决定为2410的WinCE做一个IIC调试助手,以免下次再碰到类似的问题,而多花冤枉时间。
IIC调试助手的主要功能:检测S3C2410 IIC-Bus上的设备,并给出对应的Slave Address。这样,我们就可以快速判断硬件是否有问题。除了侦测设备,同时也要支持读和写的功能。通过选择,能方便控制IIC-Bus上不同的从设备,方便调试。
S3C2410有一个多主IIC串行总线,IIC总线上主从设备之间数据通信由SDA和SCL来完成。SDA和SCL信号线是双向的。一般情况下,2410作为主设备,它可以接收从设备上发出的数据或者发送数据给从设备。2410中跟IIC相关的寄存器主要有以下几个:
IICCON——IIC控制寄存器;IICSTAT——IIC状态寄存器;IICDS——IIC移位寄存器; IICADD——IIC地址寄存器。
IIC总线空闲时,SDA和SCL信号线都保持高电平。在SCL保持高电平的情况下,SDA的下降沿标志一个开始,SDA的上升沿标志一个停止。开始和停止的状态都是由主设备发起的。这也是判断主从设备的一个方法。紧跟在开始位之后的是一个7bit的地址数据,也就是Slave Address,它用来选择特定的IIC从设备,第8bit用来表明读写。SDA信号线上的数据都是8bit的。每个字节后面都紧跟一个ACK位。IIC开始位和停止位的时序图如下:
2410的IIC总线有四种工作模式:主发送、主接收、从发送、从接收。我们经常使用的一般是主发送和主接收模式。IIC调试助手也是基于这两种模式的。有关S3C2410 IIC更详细的资料请参考其datasheet。
先为IIC-Bus写一个驱动,最终编译为IICBus.dll,调试时通过驱动调试助手动态加载。具体使用方法请看使用教程。如果系统启动时已经加载了其他的IIC驱动,建议通过驱动调试助手暂时停用,否则在加载本驱动时会出现问题。应用程序的界面如下:
点击Scan按钮,侦测IIC总线上的设备,如果硬件正常将返回Slave Address。通过选择Slave Address控制具体的硬件设备,如EEPROM、PCF8591、CH7004等连接在IIC总线上的设备。
点击Read按钮,将从选择的从设备上获取数据,数据的长度由Read Num来确定,Read Num中填入十进制的数即可,最大不超过256。
点击Write按钮,将输入的数据发送到从设备上。输入的数据必须是16进制的,每个字节的数据由两个字符组成,如设置PCF8591的DA命令为4000,40为控制字节,00为有效数据(DA的值)。
具体的读写操作必须根据IIC从设备的情况来定,在测试时请查阅相关文档。该驱动和应用程序在WinCE5.0下测试通过。
WinCE-IIC调试助手(S3C2410)及使用视频教程的下载地址: http://files.cnblogs.com/we-hjb/S3C2410-WinCE-IIC.rar
WinCE5.0下单文件版IIC调试助手的下载地址:http://files.cnblogs.com/we-hjb/IICMgr_CE5.0.rar