BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #14500同步于 2010/7/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

请教单片机I2C通信的问题

pigg
2010/7/19镜像同步11 回复
目前做单片机的开发时遇到很多问题,尤其是硬件上的,由于缺乏经验,解决不了很苦恼,希望征个朋友可以一起讨论学习。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dxzz8705机器人#1 · 2010/7/25
【 在 pigg 的大作中提到: 】 : 目前做单片机的开发时遇到很多问题,尤其是硬件上的,由于缺乏经验,解决不了很苦恼,希望征个朋友可以一起讨论学习。 你遇见什么问题,说吧~
pigg机器人#2 · 2010/7/28
【 在 pigg 的大作中提到: 】 : 目前做单片机的开发时遇到很多问题,尤其是硬件上的,由于缺乏经验,解决不了很苦恼,希望征个朋友可以一起讨论学习。 : -- 我在做ST72f321bar9和PT2313L的单片机I2C通信,在debug的时候我发现我的程序在stvd里跑不起来,单步的时候能通过必须是单步从start条件那个函数开始,如果从后面送地址开始单步运行就会出现(从示波器上看)PT没有拉低ACK,单片机也没有收到ACK,通信就进行不下去了。
lanphon机器人#3 · 2010/7/28
【 在 pigg 的大作中提到: 】 : 我在做ST72f321bar9和PT2313L的单片机I2C通信,在debug的时候我发现我的程序在stvd里跑不起来,单步的时候能通过必须是单步从start条件那个函数开始,如果从后面送地址开始单步运行就会出现(从示波器上看)PT没有拉低ACK,单片机也没有收到ACK,通信就进行不下去了。 木有用过你说的两个单片机,但对I2C还是做过的 如果是自己写的函数,建议最开始不要用任何函数封装,先实现通信再把必要的部分封装起来 如果是从网上找的函数,建议把I2C通信协议看懂,然后对照函数一步一步调试 其实我觉得还是自己写比较靠谱
pigg机器人#4 · 2010/7/28
嗯?什么是“不要用任何函数封装,先实现通信再把必要的部分封装起来”啊?是我自己写的程序,st的单片机是带I2C2的接口的,我把程序从start()那个函数开始单步运行就一切都很好,但是如果从start()那个函数后开始单步运行就会出现从送地址给PT(不是单片机),PT就回不了ACK,RUN的时候跟这种情况一样。
ericyosho机器人#5 · 2010/7/28
那start里面到底是啥呢?是不是有必要的初始化步骤呢?
pigg机器人#6 · 2010/7/29
在start()之前,是初始化的部分,start()里就是将单片机的start bit“置一”,从而产生初始条件;
lanphon机器人#7 · 2010/7/29
【 在 pigg 的大作中提到: 】 : 在start()之前,是初始化的部分,start()里就是将单片机的start bit“置一”,从而产生初始条件; I2C不就只有两根线咯,一个sda,一个sclk. 我记得开始信号时sclk为低电平的时候将sda拉高表示开始吧,忘了,反正挺复杂的 我说的意思是如果你自己写通信过程的话,第一步不要使用任何函数调用,从头到尾一步一步严格按照通信协议来,即使是重复的部分,比如开始信号也别偷懒,不用函数封装,用一次就写一次 实现通信过程没有问题之后,再把相同的部分用函数封装起来。这样做的好处是首先不用函数封装对于I2C协议的具体细节能够更好的把握,而且出了问题也比较容易查证。后期使用函数封装也有了前期已经实现的保证。 不知道我这样说你明白了没?
pigg机器人#8 · 2010/7/29
明白了。但是,请问一下,你觉得这种只能单步运行不能run有可能是什么原因吗?(硬件or程序)
lanphon机器人#9 · 2010/7/29
【 在 pigg 的大作中提到: 】 : 明白了。但是,请问一下,你觉得这种只能单步运行不能run有可能是什么原因吗?(硬件or程序) I2C对时间有要求,最高400K的速度,所以快点的单片机需要在合适的地方等待一段时间。 我猜可能直接运行速度太快导致的