手电大家谈-手电筒爱好者之家

 找回密码
 注册成为会员,享受更多功能。

QQ登录

只需一步,快速开始

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: cyradg

[电子电路] 请教各位I2C对24C02写完后无法立即读的问题

[复制链接]
  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-16 23:40 | 显示全部楼层
    hellohello22 发表于 2021-2-16 21:40
    想学习原理,就得从底层开始,囫囵吞枣学不深,出了问题定位更难,我一直坚持自己写底层,收获甚大,细节 ...

    我看网上说I/O模拟I2C效率其实不如直接用单片机里面的TWI硬件功能高,TWI功能里一堆状态我都看不太懂,就是TWSTO,TWSTA,TWINT,TWEA,TWEN之类一堆怎么配合的看不懂,SDA,SCL时序配合比较严谨,参数一配错,设备可能不会正确回应ACK,后续也就没了。
    无标题.png

    点评

    i2c那个速度,还谈什么效率, 本身就是应付低速设备, 真要高速上spi了,象i2c这种简单的协议,硬件的反而要按要求各种设置,还不如几个for循环就搞定,IO模拟反而更自由, 除非特殊需要,我一直用它 学单片机没有捷  详情 回复 发表于 2021-2-17 00:01
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-1-15 14:39
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2021-2-16 23:42 | 显示全部楼层
    cyradg 发表于 2021-2-16 23:19
    不会汇编。已经上示波器了,写进去看波形好像没问题,但是读被我修改的面目全非,看示波器,发 ...

    ATMEL公司已经停产单片机吧?
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-9-3 07:49
  • 签到天数: 941 天

    [LV.10]以坛为家III

    发表于 2021-2-17 00:01 | 显示全部楼层
    cyradg 发表于 2021-2-16 23:40
    我看网上说I/O模拟I2C效率其实不如直接用单片机里面的TWI硬件功能高,TWI功能里一堆状态我都看不太懂,就 ...

    i2c那个速度,还谈什么效率, 本身就是应付低速设备, 真要高速上spi了,象i2c这种简单的协议,硬件的反而要按要求各种设置,还不如几个for循环就搞定,IO模拟反而更自由, 除非特殊需要,我一直用它


    学单片机没有捷径可走,时序操作是最基本的,串口还有不少厂家自己搞的各种非标协议,这些都得自己写时序,看别人的程序还不如自己写(除非自己搞不好的,比如mp3压缩解码之类)

    点评

    我也是刚开始看,很多C指令都忘了,你指望我起点高不太现实。开发板是我十年前的M16的开发板,当时近300买的,能测试的功能还挺多。很久没弄这些了,最近几个月才知道能到嘉立创白嫖PCB板,想自己弄些玩玩  详情 回复 发表于 2021-2-17 08:31
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-8 07:52
  • 签到天数: 463 天

    [LV.9]以坛为家II

    发表于 2021-2-17 00:04 | 显示全部楼层
    不使用硬件接口,自己写一个i2c,试试看

    点评

    目前写不来,I2C协议目前大概知道些了,但是单片机的C指令怎么写还不太熟悉。  详情 回复 发表于 2021-2-17 08:32
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 08:31 | 显示全部楼层
    hellohello22 发表于 2021-2-17 00:01
    i2c那个速度,还谈什么效率, 本身就是应付低速设备, 真要高速上spi了,象i2c这种简单的协议,硬件的反而 ...

    我也是刚开始看,很多C指令都忘了,你指望我起点高不太现实。开发板是我十年前的M16的开发板,当时近300买的,能测试的功能还挺多。很久没弄这些了,最近几个月才知道能到嘉立创白嫖PCB板,想自己弄些玩玩,所以又重新学了,目前也就简单的一些功能,什么I/O口操作,Timer0,1,2时钟,ADC,USART,都上开发板测试了没问提,TWI卡了,SPI和模拟比较器还没看,至于什么显示器显示,步进电机,蓝牙,无线就更别说了。慢慢来吧。不过我个人不主张汇编,太麻烦了,现在的开发环境好多功能多做成库了。ATMEGA有点老了,好多都不玩这个,都玩STM,PIC什么的,我也只是玩玩,手头有这个M16开发板就先玩这个吧,省的再买。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 08:32 | 显示全部楼层
    zgj 发表于 2021-2-17 00:04
    不使用硬件接口,自己写一个i2c,试试看

    目前写不来,I2C协议目前大概知道些了,但是单片机的C指令怎么写还不太熟悉。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-7-4 12:33
  • 签到天数: 2553 天

    [LV.Master]伴坛终老

    发表于 2021-2-17 08:56 | 显示全部楼层
    不要用TWI口,那个操作不太好用,的确远不如IO口模拟。
    没有波形,很大可能是I/O脚的输入、输出方式没设对,还有内部上拉电阻的设置。

    点评

    I/O口模拟,是要根据传输模式设置SDA引脚的输入输出方向,不过开启TWI功能后,SDA,SCL两个脚好像不太像I/O口了,无论你怎么去设置这两个脚的方向,该发还是发,该收还是收。现在看示波器波形,只写是正常的,只读不  详情 回复 发表于 2021-2-17 11:24
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 11:24 | 显示全部楼层
    szxw 发表于 2021-2-17 08:56
    不要用TWI口,那个操作不太好用,的确远不如IO口模拟。
    没有波形,很大可能是I/O脚的输入、输出方式没设对 ...

    I/O口模拟,是要根据传输模式设置SDA引脚的输入输出方向,不过开启TWI功能后,SDA,SCL两个脚好像不太像I/O口了,无论你怎么去设置这两个脚的方向,该发还是发,该收还是收。现在看示波器波形,只写是正常的,只读不正常,发送起始信号和片选信号都正常,发送存储地址,看示波器是没有波形,好像什么原因没发出去,反而是设备莫名其妙的回应后立即返回了一个0x0F数据。慢慢看吧,呵呵,I2C目前除了操作24C02我也想不出其他作用,24C02就256个存储字节,还不如去操作单片机片内存储简单。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 14:14 | 显示全部楼层
    好像大致明白了些,读不出是和24C02有关,看24C02手册,大致的意思是一旦进入读模式,24C02默认是按顺序读,也就是不再接收所谓发送过来的读地址,所以看不到信号,而是只要主机回应了ACK,24C02就返回当前内存地址的内容。由于是第一次开机,内存地址为0,所以就是直接返回0地址的内容。刚刚测试往0地址写入数据0xAA,再读,的确是0xAA,然后我又试了往0地址写入0xBF,读出来又是0xBF。
    那么怎么读24C02指定的地址内容呢,按24C02手册说,先弄个伪写操作,就是发送起始信号,再发送片选信号进入写模式,然后发送地址N(是24C02进入指定地址的位置),然后重发起始信号,再发片选地址进入读模式,再回应个ACK信号,24C02就会把N地址的内容返回来,接着跳到N+1地址准备,总之,24C02进入读模式后,除了接收主机的ACK,NACK,S,P总共4个信号以外,其他啥玩意都不理,直接SDA根你拉低。

    点评

    不能随意读写,太不人性了,不喜欢这样的通讯协议  详情 回复 发表于 2021-2-17 14:30
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-1-15 14:39
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2021-2-17 14:30 | 显示全部楼层
    cyradg 发表于 2021-2-17 14:14
    好像大致明白了些,读不出是和24C02有关,看24C02手册,大致的意思是一旦进入读模式,24C02默认是 ...

    不能随意读写,太不人性了,不喜欢这样的通讯协议

    点评

    是的,读出时,我看示波器是把我发的地址变成0了,实际上就是当做一个ACK回应,然后后面看波形就是个0x0F数据,用PORAT端口显示TWDR,的确就是0x0F,所以,对于读操作,24C02压根就没理会我发的内存地址信息,直接给  详情 回复 发表于 2021-2-17 15:42
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 15:24 | 显示全部楼层
    搞定了。读还是和24C02响应有关,现在Proteus和开发板都是可以写进去后立即读出刚写进去的信息。24C02读是对N地址读或写操作完就跳到N+1地址,所以写完后要做伪写操作让24C02重新指到N地址去读,否则读出的是N+1地址的内容。 无标题.png
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-29 09:01
  • 签到天数: 1219 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-17 15:42 | 显示全部楼层
    dqp05 发表于 2021-2-17 14:30
    不能随意读写,太不人性了,不喜欢这样的通讯协议

    是的,读出时,我看示波器是把我发的地址变成0了,实际上就是当做一个ACK回应,然后后面看波形就是个0x0F数据,用PORAT端口显示TWDR,的确就是0x0F,所以,对于读操作,24C02压根就没理会我发的内存地址信息,直接给我回应数据了,再看24C02手册,才明白读操作是按顺序读的,当前在哪就从哪读,读完这个继续读下一个,依次类推循环。
    无标题.png
    回复

    使用道具 举报

    本版积分规则

    小黑屋|手机版|Archiver|论坛自带搜索|下载论坛app|手电大家谈-手电筒爱好者之家 ( 备案序号:鲁ICP备05002565号 )
    以上言论纯属个人观点,与手电大家谈立场无关。
    最佳浏览模式:1920*1080


    GMT+8, 2024-10-5 17:22 , Processed in 0.214843 second(s), 55 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表