0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ FPGA的PS端IIC设备接口使用

FPGA设计论坛 ? 来源:FPGA设计论坛 ? 2025-04-17 11:26 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

zynq系列中的FPGA,都会自带两个iic设备,我们直接调用其接口函数即可运用。使用xilinx官方提供的库函数,开发起来方便快捷。

一:配置vavido

创建block design,勾选iic设备,可以看到iic的引脚可以进行这种分配,对照原理图,勾选对应的引脚即可。

56c47362-19d6-11f0-9310-92fbcf53809c.png

二:sdk开发

创建好工程后,在sdk中对iic设备进行初始化,和对iic设备的读写操作。

首先是对iic设备进行初始化,初始化iic设备的基地址,设备id,iic时钟频率等信息。

u32 XpsIic_Initialize(XIicPs*InstancePtr,u16 DeviceID,u32 iic_clk) { int Status; XIicPs_Config *Config;// print("查找设备信息");Config = XIicPs_LookupConfig(DeviceID);if (NULL== Config) { print("查找id失败");return XST_FAILURE;} Status = XIicPs_CfgInitialize(InstancePtr, Config, Config->BaseAddress);if (Status!= XST_SUCCESS) { return XST_FAILURE;} Status = XIicPs_SelfTest(InstancePtr);if (Status!= XST_SUCCESS) { return XST_FAILURE;} /*  * 设置i2c的sclk时钟  */  Status=XIicPs_SetSClk(InstancePtr, iic_clk);if (Status!= XST_SUCCESS) { print("设置clk失败");return XST_FAILURE;} return XST_SUCCESS;}

然后就是iic的读写操作,我们使用官方提供的iic接口函数,有时候也需要对其再次进行封装,这样自己使用起来比较顺手。

1:发送函数

s32 XIicPs_MasterSendPolled(XIicPs*InstancePtr, u8 *MsgPtr,              s32 ByteCount, u16 SlaveAddr)             

这是一个用于master的轮询发送函数,我们常用的iic发送函数模式就是轮询的,至于中断模式的,则是另一个函数XIicPs_MasterSend()。两者看起来容易混淆

4个参数:

@param InstancePtr is a pointer to the XIicPs instance. 设备指针

@param MsgPtr is the pointer to the send buffer. 待发送数据数组指针

@param ByteCount is the number of bytes to be sent. 发送数据的个数

@param SlaveAddr is the address of the slave we are sending to. 从机地址

2:接收函数

s32 XIicPs_MasterRecvPolled(XIicPs*InstancePtr, u8 *MsgPtr,          s32 ByteCount, u16 SlaveAddr)

此函数也是只用于轮询模式的,不适合中断模式的读取,中断模式的接收函数叫XIicPs_MasterRecv()

四个参数:

@param InstancePtr is a pointer to the XIicPs instance. 设备指针

@param MsgPtr is the pointer to the receive buffer. 接收数据存储的地方

@param ByteCount is the number of bytes to be received. 接收到的数据个数

@param SlaveAddr is the address of the slave we are receiving from. 从机地址

对于读函数,需要在注意的地方在于需要根据实际设备的读时序进行封装,直接调用这个函数可能不会成功。

举个例子:

56e3f11a-19d6-11f0-9310-92fbcf53809c.png

在这个时序中可以看出,我们是先发送一个写动作,但没有实际数据写入,然后在发送一个读指令。在sdk中写函数和读函数是分开的,所以我们在读取数据时,可能跟我们在使用模拟iic操作的时候不太一样。

u32XpsIic_ADS1015_Read(XIicPs *InstancePtr,u8Write_addr,u8ConReg_addr,u8Read_addr) { int status;u8buf[1]; buf[0] = ConReg_addr; status =XIicPs_MasterSendPolled(InstancePtr, buf,1,Write_addr); //先发送 写地址+转换寄存器地址if(status != XST_SUCCESS) {returnXST_FAILURE; }  while(XIicPs_BusIsBusy(InstancePtr)); status =XIicPs_MasterRecvPolled(InstancePtr, ADS1015Buf,2, Read_addr); //在发送读地址进行读取数据if(status != XST_SUCCESS) {returnXST_FAILURE; }returnXST_SUCCESS; }

注意事项:

使用iic的接口函数进行开发时,从机的器件地址是7位的,不带读写位。比如你在调用读/写函数时,程序内部会在这个地址的后面自动的补上这个读写位,所以这也和上面提到的为什么sdk有单独的读写函数,也是基于这个原因。你调用写函数时,就会在后自动补上0;调用读函数时,就会在后面自动补1。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22070

    浏览量

    619742
  • 接口
    +关注

    关注

    33

    文章

    9032

    浏览量

    153982
  • Zynq
    +关注

    关注

    10

    文章

    615

    浏览量

    48335
  • IIC设备
    +关注

    关注

    0

    文章

    3

    浏览量

    5218

原文标题:ZYNQ——PS端IIC设备接口使用

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ZYNQ Ultrascale+ MPSOC FPGA教程】第三十二章PL读写PSDDR数据

    PL和PS的高效交互是zynq soc开发的重中之重,我们常常需要将PL的大量数据实时送到PS处理,或者将
    的头像 发表于 01-30 09:54 ?1.6w次阅读
    【<b class='flag-5'>ZYNQ</b> Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第三十二章PL读写<b class='flag-5'>PS</b><b class='flag-5'>端</b>DDR数据

    ZYNQ7000系列 PS、PL、AXI 、启动流程基本概念

    /005899fe6815 二、ZYNQ7020 分为PS、PL PS: 处理系统 (Processing System) , 就是与
    的头像 发表于 05-12 10:25 ?1.8w次阅读
    <b class='flag-5'>ZYNQ</b>7000系列 <b class='flag-5'>PS</b>、PL、AXI 、启动流程基本概念

    ZYNQ中的ps到底担任了什么作用?

    ZYNQ中的ps到底担任了什么作用?,除了不用FPGA设计接口驱动还有什么?
    发表于 01-26 14:01

    zynq XC7Z100板卡学习资料:基于zynq XC7Z100 FMC接口通用计算平台

    、USB口、UART-RS422、千兆网、JTAG调试等接口。二、基础接口和性能核心板:使用 Zynq-7100SoC 对嵌入式应用进行快速原型设计以实现优化;PS
    发表于 03-24 09:39

    ZYNQ PSIIC接口使用笔记分享

    ZYNQ7000系列FPGAPS自带两个IIC接口接口PIN IO可扩展为EMIO形式即将I
    发表于 12-23 17:06

    ZYNQ PSIIC接口使用笔记分享

      ZYNQ7000系列FPGAPS自带两个IIC接口接口PIN IO可扩展为EMIO形式即
    发表于 01-08 16:44

    ZYNQ PSIIC接口怎么使用?

    ZYNQ PSIIC接口使用笔记
    发表于 02-23 06:23

    Zynq-7000 PSIIC接口使用笔记

    ZYNQ7000系列FPGAPS自带两个IIC接口接口PIN IO可扩展为EMIO形式即将I
    的头像 发表于 07-25 17:56 ?2932次阅读
    <b class='flag-5'>Zynq</b>-7000 <b class='flag-5'>PS</b><b class='flag-5'>端</b><b class='flag-5'>IIC</b><b class='flag-5'>接口</b>使用笔记

    ZYNQ PSIIC接口使用笔记

    ZYNQ7000系列FPGAPS自带两个IIC接口接口PIN IO可扩展为EMIO形式即将I
    发表于 01-28 08:05 ?25次下载
    <b class='flag-5'>ZYNQ</b> <b class='flag-5'>PS</b><b class='flag-5'>端</b><b class='flag-5'>IIC</b><b class='flag-5'>接口</b>使用笔记

    ZYNQ 的启动流程介绍

    普通的 FPGA 一般是可以从 flash 启动,或者被动加载,但是ZYNQ不行,ZYNQ必须PS参与
    的头像 发表于 07-22 10:10 ?8981次阅读

    ZYNQ7020的PS的基本开发流程

    这篇文章记录ZYNQ7020的PS的基本开发流程,关于PL的开发流程,参考之前文章,这里放个超链接。
    的头像 发表于 07-24 18:12 ?1.1w次阅读

    FPGAs,ZynqZynq MPSoC器件的特点

    Zynq MPSoC是Zynq-7000 SoC(之后简称Zynq)的进化版本。Zynq是赛灵思发布的集成PL(FPGA)和
    的头像 发表于 08-15 09:16 ?3278次阅读

    有关AXI IICPS IIC的自调试技巧

    AXI IICPS IIC 控制器都符合 NXP IIC 总线规范。用户必须确保其选择使用的从设备的时序参数与UM10204 的第 4
    发表于 08-25 10:29 ?2270次阅读

    Zynq系列FPGA的亮点

    Zynq 系列的亮点在于 FPGA 里包含了完整的 ARM 处理子系统(PS),每一颗 Zynq 系列的处理器都包含了Cortex-A9处理器,整个处理器的搭建都以处理器为中心, 而且
    的头像 发表于 08-06 10:20 ?1810次阅读
    <b class='flag-5'>Zynq</b>系列<b class='flag-5'>FPGA</b>的亮点

    xilinx ZYNQ7000系列基本开发流程之PS

    ZYNQ 芯片分为 PL 和 PSPS 的 IO 分配相对是固定的,不能任意分配,虽然 PS
    的头像 发表于 08-11 09:36 ?1.2w次阅读
    xilinx <b class='flag-5'>ZYNQ</b>7000系列基本开发流程之<b class='flag-5'>PS</b><b class='flag-5'>端</b>