基于FPGA的IIC通讯-MASTER发送篇

四、IIC通讯

(一)、概述

        本章节进入到IIC通讯篇章,本篇章开始就得开始付费啦,请关注的各位理解,因为代码每个人的想法不同书写的个人版权,请大家注意版权问题,IIC通讯主要分为两大部分,一个是主机读和主机写,另一个是从机接收,IIC具体的原理这里就不细讲,主要是依据IIC时序进行代码编写,本节主要是介绍IIC主机写程序,依据的是SMBUS2.0协议,它与IIC的不同在于存在IIC_SCL时钟的约束,即SMBUS是IIC的一个子集。

(二)、时序介绍

        了解IIC协议的小伙伴们因该都知道,IIC主要有几个重要的信号,分别是IIC读写开始信号,一个是应答信号,另一个是IIC停止信号,就以开始信号为例,什么时候表示IIC开始读写?在原理上我们知道IIC-SCL为高电平时,IIC-SDA从高电平转为低电平表示读写开始,但是需要保持多久才能时开始信号?

        这就涉及到建立时间与保持时间的概念了,如上图TBUF和THD_STA,它的意思是开始信号条件前需要保持最少TBUF的时间,并且IIC-SDA下降后需要等待THD_STA时间IIC-SCL才能从高电平变为低电平;从表中可以看到Min和Max字样,后面跟随着Units表示单位,所以可以知道开始信号条件前需要保持最少TBUF == 4.7us的时间,并且IIC-SDA下降后需要等待THD_STA == 4.0us的时间IIC-SCL才能从高电平变为低电平,这样就能表示IIC传输开始。

        又因为IIC的传输速率是10K到400Khz,但是SMBUS的传输速率是10K到100Khz,那我们产生的IIC-SCL就得符合上述标准;但是我们的IIC-SCL是要一直产生的吗?答案是不需要一直产生,因为IIC是两线协议,可能这两根线并不是挂载着一个主机一个从机的情况,可能有多个主机和多个从机的情况,所以我们并不需要一直的发送IIC-SCL;那么问题来了,如何保证时序要求在范围内,其实只要以及使用时钟的分频出所需要速率即可。

        在数据端也是需要遵循建立时间和保持时间,但是可以看到它的时间单位是在纳秒级别的,在变化速率为微妙级的情况下,我是进行忽略处理的;好的,现在话不多说,我的IIC-MASTER-WRITE的代码支持什么功能呢?一个是支持是否采用寄存器地址,另一个是支持连续写,可以任意涉及连续写的次数,代码如下:

// ********************************************************
// Copyright: 优快云 account juningc
// The email address is: junpingc@noreply.gitcode.com
// Unauthorized copying is prohibited. If you need to use it, please contact the author
// All interpretation rights belong to the copyright author
// ********************************************************
module iic_write_master #
(
   parameter               DWID       = 8       ,
   parameter               UCNT       = 25      ,
   parameter               BUILD_TIME = 5       ,  //us
   parameter               HOLD_TIME  = 4          //us
)
(
   input                   clk_sys              ,
   input                   rst_sys              ,
   //
   input                   waddr_mode           , // 0:使用寄存器地址  1:不适用地址
   input                   write_dena           ,
   input      [6:0]        slave_addr           ,
   input 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值