OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4192|回复: 5

关于I2C配置的学习和使用的一些理解,向各位大神求教。

[复制链接]

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-2-22 14:01:16 | 显示全部楼层 |阅读模式
100金钱
大约一年前来到公司,使用的芯片是LPC系列的,当时几乎没有任何资料,也没有例程作为参考,在配置I2C的时候用了很长很长的时间也没搞好,最后几乎弄好了,只差了一小步,出现了特别神奇的错误,不知道哪里的问题,反正是I2C的配置上或是传感器的使用上肯定有问题,实在找不到了,又被时间压迫,最后改用了STM32,因为代码简单,例程又多,几天时间传感器的读取和配置就全搞定了。
这期间因为原子的例程封装的太好了,我从来没有去想过I2C的时序问题。甚至不知道主频是多少,各个模块是几分频也不知道。只需要去调用读和写这几个函数,再修改一下传感器的开关等等就搞定了。当然,做LPC时我也从来没想过时序问题,虽然资料少,但我一直认为时序这些东西各个芯片都会封装好,直接用就是了。
最近一断时间,又改用了TI的芯片,在一次开会向领导提出问题时,他才知道我从来没配置过时钟,就问我:不配置时钟怎么可能做出来I2C?我说我是用大家封装好的东西,时序什么的完全不用去调。几条函数,加上适当的延时就好了,我们领导很不理解,其实我也很不理解。所以在这里想问一下调I2C的逻辑。
我的问题:
1、领导说要对着手册上的时序一点一点调,而我却没有,甚至完全不知道怎么对着手册上的时序去调。大学到现在,做单片机起码2年左右了,也没调过这些,这是我的缺失吗?还是说有些底层调时序的东西根本不用我去考虑?
2、现在新接触了一款新的芯片,又是在调I2C,我不懂时序的话,只是有一些例程,但资料多少大约介于STM32和之前用的LPC系列中间吧,不能说没有,但也不太多。我有必要去考虑配置它的时序吗?因为代码我几乎都看了一遍也不知道所谓的时序应该在哪里改。
3、有个同事说:每个模块(比如UART、I2C、DMA等等)不知道它的时钟是怎么设置的,你就不可能调好它,所谓的计好应该就是指去正常控制它。。。但是我做了这么久芯片,几乎没涉及过时钟的更改,在我看来就算改也只是一个接口,我不用去考虑它的寄存器怎么移位,也不用管它是几分频,一行代码加一行注释,想写几分频就把0x01改成个0x02就OK了。我这么理解有问题吗?

求各位大神赐教!说说你们的想法也好。

自在随心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-22 14:15:22 | 显示全部楼层
还有就是,以后我会一直在嵌入式方向上干下去,这些东西我必须要去了解吗?
其实在几天之前我是认为不必须的,用到什么就改什么,并且让我怎么改我就能怎么改,就够了。太底层的东西自有专门的人去写,他们有他们的任务,就像原子哥一样,他是写底层的,写整个STM32的框架,而我在公司是作产品开发的,任务是灵活使用别人写好的函数。
又想到一个问题:前几天领导和我说,既然STM32调好了,就可以把STM32的东西用到TI的芯片上,而STM32与CC2650两款芯片在代码的框架上那是完全完全不一样的,CC2650模拟出了一个实时操作系统,用到了各种各样的结构体,我认为我不可能放弃TI的例程和框架,而将STM32的框架硬塞到TI中。没有人这么做,也不可能实现。唯一我能参考的,就是什么时候需要从传感器取数据,一次能取出多少组,取完数据是否需要对传感器进行配置等。我这么想有问题吗?
自在随心
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2016-2-22 14:27:37 | 显示全部楼层
1、一般都用的模拟I2C,而不是硬件I2C,用GPIO模拟I2C时序,只要start,response,stop 各信号遵从时序,就可以了
2、如果I2C非要跟时钟扯上关系,则是配置这俩GPIO的时钟时应用的
学无止境
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-22 14:36:00 | 显示全部楼层
jermy_z 发表于 2016-2-22 14:27
1、一般都用的模拟I2C,而不是硬件I2C,用GPIO模拟I2C时序,只要start,response,stop 各信号遵从时序,就 ...

start和stop这些函数,其实都是原子封装好的,我从来没去看过它对不对,如果我再做一个新的芯片,人家也是封装好了的,长期做这个项目,我有必要去再对一下时序吗?
自在随心
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-6-27
在线时间
981 小时
发表于 2016-2-22 14:44:51 | 显示全部楼层
首先,IIC你不应该考虑用硬件的,使用软件模拟就很容易实现了,和使用什么单片机没关系,我也在LPC单片机上使用IIC,也不用去纠结什么调试不成功,错误等问题。其次,每个模块有自己的时钟,如果使用它需要配置就去配置就行了,也没有什么纠结的地方,比如UART,它要知道它的时钟,才能配置出你要的波特率,这些都是很正常的一个配置过程,有就去理解它,要用就怎样用就行了。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2016-2-22 14:50:03 | 显示全部楼层
yuzeyuan1 发表于 2016-2-22 14:36
start和stop这些函数,其实都是原子封装好的,我从来没去看过它对不对,如果我再做一个新的芯片,人家也 ...

没有必要,I2C很成熟的协议,除非遇到不常用的协议,必须对照协议慢慢调

成熟的协议,没必要那样干
学无止境
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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