前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IIC调试心得

IIC调试心得

作者头像
哆哆jarvis
发布2022-08-23 14:04:46
7020
发布2022-08-23 14:04:46
举报
文章被收录于专栏:嵌入式进阶之路

前言

代码语言:javascript
复制
(向左滑动)今天遇到一个问题,存储芯片24C16存入数据后重新上电读取数据失败,用示波器刷抓取波形之后发现写数据没问题,但是读取数据部分有问题,来看看到底是怎么回事?

IIC读写时序

代码语言:javascript
复制
先来回顾IIC的读写时序,首先记住两句话:
①时钟SCL低,数据SDA发生变化;
②时钟SCL高,数据SDA保持稳定;

S

器件地址+0

A

写入首地址

A

DATA1

A

···

DATAn

A

P

S

0xA2

A

0x06

A

02

A

```

5A

A

P

读取到写时序没问题,写入数据0x02,0x5a。 程序用伪代码表示: 读字节:

代码语言:javascript
复制
u8 IIC_readbyte()
{
    IIC_start();//起始信号
    IIC_putbyte();//器件地址
    IIC_Putbyte();//首地址
    IIC_stop();
    IIC_start();
    IIC_Putbyte();//器件地址+1
    for( i = 0 ; i < length; i++)
    {
        dataStart[i] = sw_i2c_readByte();
        if(i!=length-1)//cyz:the last byte
        {
            sw_i2c_backACK();
        }
    }
    IIC_stop();
 }
 
u8 IIC_writebyte()
{
    IIC_start();//起始信号
    IIC_putbyte();//器件地址
    IIC_Putbyte();//写入首地址
    for(i=0;i<length;i++)
        IIC_putbyte();//写入数据
    IIC_stop();
}

START

器件地址+0

A

读出首地址

A

器件地址+1

A

DATA1

A

···

DATAn

!A

P

START

0xA2

A

0x06

A

0xA3

A

00000000

00000000

可以看到读时序数据部分有问题,前面的都正常。 但是程序是从其他平台移植过来的,驱动函数没有改动,只是改了IO口输入输出配置的程序以及端口更改,所以软件部分实在是找不到原因了。于是检查硬件。

IIC硬件电路

参考网上一张图:

可以看到,在数据线跟时钟线上接了两个上拉电阻,在总线空闲时两条线为高电平。 而我电路上的存储芯片24C16没有接上拉电阻,所以我需要将单片机上的IO口设置为上拉

于是,问题解决。

总结: 我们在调IIC协议的时候,应该先考虑硬件是否有问题,SDA跟SCL上拉是必要的。否则一直调时序也不会有结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆jarvis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • IIC读写时序
  • IIC硬件电路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档