IIC设计小记

来源:互联网 发布:ftp指定端口号是多少 编辑:程序博客网 时间:2024/05/29 08:36

     最近在做一个项目的验证工作,需要用到一款音频编解码芯片(WM8731),该芯片搭载在FPGA 开发板上,使用IIC协议进行芯片的配置工作。给我的感觉是,从实际应用的角度出发,对协议的理解会更加深刻全面。在此记录一下思路。

    首先,需要找一份详细的IIC协议。IIC协议作为一种工业上的标准已经存在几十年了,之所以需要通信标准,我的理解是为了实现不同公司产品的兼容性,需要由一个机构制定一个通信接口,各公司的产品只要是按照通信标准设计的,就可以同其他公司的产品通信。这样的话,IIC协议就可以从两个渠道获取,一个是标准制定机构提供的详细协议,另一个是各公司生产的遵循通信标准的产品datasheet。由于前者过于详细,不容易找到重点,所以一般使用datasheet就可以了。虽然WM8731也有关于IIC的说明,但是不太详细,所以又重新找了一份。常见的有ATMEL公司生产的EEPROM(AT24C0X)。

    其次,对协议的理解。从我现在接触到的协议来看,多数协议在第一次读的时候会不太好理解,给人的感觉就是好像欠缺了很多细节,给人一种松垮垮的感觉。其实,标准的制定者在制定协议的时候,只会说明信号之间的关系(功能),至于如何实现(细节)应该由协议使用者去提供,这样做的好处是使协议更加灵活,能够适用不同应用的需求。在IIC协议中,规定了串行时钟sclk和串行数据sdat,当sclk高电平时sdat拉低表示开始信号,当sclk高电平时sdat拉高表示结束信号,因此串行数据的变换必须在sclk低电平时进行,工作频率为100kHz,这些就是IIC规定的主要内容。

    最后,模块的实现。IIC中没有对数据功能做任何规定,这部分由音频芯片给出,总共需要传输24bit数据,分别是8bit器件地址,8bit寄存器地址和8bit寄存器数据。在设计时需要自行规定一些细节,比如采用多少的系统时钟,需不需要分频,数据在何时变换等。在这个设计中使用了50M的时钟,因此需要500分频,根据sclk和sdat的关系,以sdat拉低为起点,将一个比特时钟分成四段,每段125,以此来规定开始、结束、sdat跳变以及数据采样的具体时刻。

原创粉丝点击