ZYNQ-IIC
一.IIC协议简介
IIC总线协议只需要两根线(SCL和SDA)就能完成通信和UART不同,UART需要设置波特率IIC不需要,IIC时钟速率:最大400K,一般不用这么高的频率,通常标准100K即可。IIC发送数据顺序是‘先发送高位再发送低位’,当然对于FPGA来讲先发高位或低位都无所谓,FPGA可以自定义,一般都是先高后低,需要了解以下几点‘从机地址’,‘寄存器地址’。
IIC时序,0为写,1为读
二.环境搭建
添加ZYNQ,双击ZYNQ进行内部配置
把PS-PL Configuration里的时钟复位和AXI GP接口去掉,这里暂时用不到
MIO Configuration 勾选SD0(40-45),Uart(46-47),IIC0(14-15),选LVCMOS1.8v
把时钟去掉这里用不到
配置DDR
输出引脚,右键Make External,保存
创建顶层文件,保存
生成bitstream,点yes,ok等待完成
导出硬件,用来做下一步开发
三.软件开发
打开SDK,等待SDK打开成功,中途不要乱点
创建软件项目,New-Application project,选hello world模板即可
直接调用SDK平台提供的API,相关函数可以通过以下方式查询
了解各函数的功能使用后下面直接动手敲代码,需要以下几点,从机地址,指令
四.运行结果
温度29.7,湿度48.0,运行成功,代码没问题
五.总结
搭建硬件方面SD0一定要勾选,UART0最好也勾选方便看打印信息,I2C0(14-15)引脚千万不能选错否则没法运行。
在此之前要先导入IIC头文件和parameter头文件,用static修饰IICPS和IICPs_Cfg定义为指针
IIC的步骤:
-
初始化IIC
1.1查找设备ID赋值给IIC配置结构体,XIicPs_LookupConfig(ID);
1.2初始化设备,XIicPs_CfgInitialize(&IIC,配置结构体,基地址);
1.3设置IIC传输速率,XIicPs_SetSClk(100),最大速率400; -
发送设备地址XIicPs_MasterSendPolled();
-
接收数据XIicPs_MasterRecvPolled();
-
计算得到的数据;
-
打印结果
谢谢~