v500大程序之IIC调试

虽然写的是IIC,但其实在system bd中并没有勾选IIC0、IIC1,而是根据IIC协议写了相关的函数(不是我写的)。

用到的RTC是DS3231芯片。

目前遇到的问题是:

zynq调试成功;fmql调试失败,其中年、日、时、秒读写成功,而月、分写入失败。

【总结:没找到原因】

疑问:写入的地址是哪里得到的?为什么是0xD0(bit0是读写控制位)---->DS3231数据手册中写了。

IIC协议:

关于 NXP PCA85073A 实时时钟读取数据时出现 IIC 传输失败的原因解析和解决方法-CSDN博客

示波器调IIC:

模拟IIc通讯失败解决办法&&通讯线长度问题_模拟iic发送字节失败-CSDN博客

发现单步调试时,写月/分出现的情况是:写入0xD0失败(无ACK应答)

而不加断点调试,写月/分出现的情况是:写入0xD0成功;写data后无ACK应答。

可能的原因是:

硬件配置(引脚,虚焊等),线路过长,速率配置/时序,主机复位,

https://www.cnblogs.com/wfagly/p/18218994

如何解决i2c设备主机与从机直接无法正常数据交互的问题-电子发烧友网

https://wenku.csdn.net/column/4smv4k79zy#3.2.2%20%E6%95%B0%E6%8D%AE%E5%B8%A7%E5%A4%84%E7%90%86%E9%94%99%E8%AF%AF

 IIC通讯失败发送数据无回应 - 嵌入式学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛!

根据以上链接,分析可能出现的原因:

(总线上只有一个设备)速率配置/时序问题;按最低速度通讯试试

硬件(上拉电阻、);

iic协议编写;

etc。

调试现象(正常情况)

黄色为SCL,紫色为SDA

写地址

写位置(0-6  表示秒分时、星期、日月年)         4表示Day

写数据        0x16表示Day为16

发现,每次写入数据(共3次),SDA都会有一个尖峰,目前认为它是应答信号。

调试现象(不正常情况)

以为尖峰后面的第一个SCL高电平为返回应答信号,所以红色框内的周期是在这之后的,即传输data——发现少一个周期,只写了7bit数据。

(后面发现,其实是尖峰前的SCL高电平为返回应答信号,这样data是8bit。但是因此发现的是,没有读取到应答信号?)

为了方便看信号,data全写0:

第一个红框为写位置(0-6),第二个红框为data写入(data设为0)

发现,写位置前是正常的(尖峰位置),而写位置后的尖峰太靠后了,使data写入出现错误(目前这么理解。)

因此增大SCL=0后的延时(SDA只有在SCL为低电平时才能变化):

但是尖峰位置随之向后延时了。

Failed

增加SCL=1的时间,读取应答信号时间延后:

本来是等1/2的高电平时间后读取应答信号,然后再等1/2的高电平时间。

是不是说明写位置(Month、Minute)时就失败了

看看zynq:

 在传输的第8个周期,SCL一变为低电平,SDA就有了尖峰。

写入失败,是因为data写入后SDA为非应答(即没有拉低)。

可能的原因:

ds3231处于忙碌或不接收数据的状态;

通信速率太快;

线路太长;

再探索IIC应答信号和非应答信号_iic发所有地址都没有应答-CSDN博客

读了一下DS3231的寄存器,Control寄存器、Control/Status寄存器的值都是0x1C、0x88。没有什么区别(写成功和不成功都是这个)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值