搜索
bottom↓
回复: 29

MCU作为主机、Linux系统的开发板作为从机,通过IIC来进行通...

[复制链接]

出0入0汤圆

发表于 2017-3-2 07:38:11 | 显示全部楼层 |阅读模式
本帖最后由 yick 于 2017-3-2 14:06 编辑

姑且认为MCU(主频芯片)与跑linux系统的板子的芯片是硬件直连的,MCU这边通过IIC协议来发送指令到到Linux系统中的板子上去,从而达到控制板子的目的。

由于是芯片间直连,这里不管是主机芯片还是丛机芯片都采用的是gpio来模拟IIC通信的方式。

主机暂时先不管,丛机首先要根据不同的GPIO口模拟相应的IIC接口来编写相应的驱动模块,然后通过脚本之类的命令把它加载到linux系统内核中去,这一步
大概知道怎么做了。(网上有很多类似的gpio模拟IIC接口的驱动例程,暂时不需要我操心)

主要问题就在这里 ,想在linux中重新创建一个进程,通过这个进程系统调用、轮询等知道什么时候底层芯片有指令发送过来了,从而得
到相应的数据,达到收到相应指令的目的,这一步具体怎么实施,希望给出一些必要的建议,或者我这里说的就有问题,请指点我一下,毕竟linux没怎么做过。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-3-2 14:07分添加
经过坛友的提醒与指点,可否这样做?
MCU那边通过gpio口类分别模拟出SCL和SDA,而A7处理器这边直接就用GPIO的两个IO口的,其中一个通过外部中断来判断什么时候数据发送了,另一个用来接收数据
(linux这里不用IIC模拟了,因为linux的IIC作为Slave,我没找到相应的说法)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2017-3-2 15:39:20 | 显示全部楼层
找到一个网友类似的问题:http://www.amobbs.com/forum.php? ... ghlight=linux%2Bi2c
貌似这样做的人真的很少。

出0入476汤圆

发表于 2017-3-2 08:14:10 | 显示全部楼层
在非实时操作系统的里面用GPIO模拟 IIc或者SPI等需要有时序的通讯基本不可能.基本上都需要用芯片的硬件来完成收发缓冲。

出0入0汤圆

发表于 2017-3-2 08:24:36 | 显示全部楼层
linux轮训太浪费了,,如果没有硬件i2c,最笨的方法就是写一个驱动,当时程调用驱动读取数据时,,就休眠改进程,,,当收到起始信号时,进入中断,开始接收数据,,接收完成唤醒进程,,把数据传给进程!

出0入0汤圆

发表于 2017-3-2 08:40:05 | 显示全部楼层
1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave不好模拟,建议用硬件IIC

出0入25汤圆

发表于 2017-3-2 08:47:03 | 显示全部楼层
能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊

出0入0汤圆

发表于 2017-3-2 09:04:53 | 显示全部楼层
果断在MCU上面做从机呀

出0入0汤圆

 楼主| 发表于 2017-3-2 09:46:27 | 显示全部楼层
jordonwu 发表于 2017-3-2 08:40
1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave ...

这个linux4.1之前不支持IIC Slave(我也不太清楚,一会儿再查查看),平时我就是在ARM的主频芯片上用gpio来模拟IIC总线接口,
从而访问一些其它小芯片(EEPROM、一些音视频的芯片),设置数据来达到控制它们的目的(这算是ARM为主,其它芯片为从的例子)。

现在假设STM32为主,一个处理器内核为A7的芯片作为丛。(这里所谓的主从之分的说法是不是相对的呢?通过IIC来通信,只要硬件上有数据过来,
A7处理器芯片这边就一个中断/轮询来检测到他们的数据,然后把这个数据传到其它进程当中去。)

出0入0汤圆

 楼主| 发表于 2017-3-2 09:47:13 | 显示全部楼层
aozima 发表于 2017-3-2 09:04
果断在MCU上面做从机呀

开始就没有这样规定啊,我倒是想这样做,很方便。

出5入0汤圆

发表于 2017-3-2 10:03:31 | 显示全部楼层
一定要IIC?换成UART还简单些,

出0入0汤圆

发表于 2017-3-2 10:11:16 | 显示全部楼层
yick 发表于 2017-3-2 09:46
这个linux4.1之前不支持IIC Slave(我也不太清楚,一会儿再查查看),平时我就是在ARM的主频芯片上用gpio来 ...

你GPIO模拟从设备,你怎么知道有数据来了?

出0入0汤圆

 楼主| 发表于 2017-3-2 10:14:07 | 显示全部楼层
墨非 发表于 2017-3-2 08:47
能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊

SPI以后也是有的,我先搞一下IIC的

出0入0汤圆

 楼主| 发表于 2017-3-2 10:15:54 | 显示全部楼层
LinuxTux.China 发表于 2017-3-2 10:03
一定要IIC?换成UART还简单些,

因为公司的部分代码都是用的IIC总线来通信的(硬件工程师爱这样设计),也是公司的习惯性设计吧,而现在跑linux系统是后来加进来的

出0入0汤圆

 楼主| 发表于 2017-3-2 10:17:42 | 显示全部楼层
jordonwu 发表于 2017-3-2 10:11
你GPIO模拟从设备,你怎么知道有数据来了?

检测高低电平来判断是否有数据,一般单片机上都算是实时的,linux可否这样做

出0入0汤圆

发表于 2017-3-2 11:07:32 | 显示全部楼层
yick 发表于 2017-3-2 10:17
检测高低电平来判断是否有数据,一般单片机上都算是实时的,linux可否这样做 ...

你试试看看效果

出0入0汤圆

发表于 2017-3-2 11:13:37 | 显示全部楼层
jordonwu 发表于 2017-3-2 08:40
1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave ...

请问硬件IIC是怎么理解?

出0入0汤圆

发表于 2017-3-2 11:28:11 | 显示全部楼层
sinc_mark 发表于 2017-3-2 11:13
请问硬件IIC是怎么理解?

就是这个IIC你不是通过IO口自己去模拟的,而是使用MCU自己带的IIC模块

出0入0汤圆

发表于 2017-3-2 12:05:12 | 显示全部楼层
mcu 应该做从机。linux 做主机就好做了

出0入0汤圆

 楼主| 发表于 2017-3-2 12:12:43 | 显示全部楼层
ALUMEI 发表于 2017-3-2 12:05
mcu 应该做从机。linux 做主机就好做了

公司有产品是以MCU为主的,以前都是做主机,现在都习惯了,如果改动的话,可能牵扯比较大

出0入0汤圆

发表于 2017-3-2 12:15:17 | 显示全部楼层
加个芯片,从IIC转UART,Linux用UART方便多了

出0入0汤圆

 楼主| 发表于 2017-3-2 14:06:04 | 显示全部楼层
我把问题再原来的基础上又重新加了另一个方案,你们在帮我看一下。

出0入0汤圆

发表于 2017-3-3 17:57:02 | 显示全部楼层
以前实现了ATMEGA16为从设备,LINUX为主设备,LINUX像访问EEROM一样访问从机

出0入9汤圆

发表于 2017-3-3 19:46:12 | 显示全部楼层
如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单,比如NXP的LPC812和LPC824就支持 IIC Slaver详细可以看官方的例程。

出0入0汤圆

 楼主| 发表于 2017-3-3 23:01:02 | 显示全部楼层
wanggoals 发表于 2017-3-3 19:46
如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单, ...

哦,那个方案现在放弃了,不过还是谢谢

出0入0汤圆

 楼主| 发表于 2017-3-3 23:02:26 | 显示全部楼层
wanggoals 发表于 2017-3-3 19:46
如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单, ...

都建议linux为master,看来这个方案真的有点难

出0入0汤圆

发表于 2017-3-4 10:28:41 | 显示全部楼层
加一个IO作为外部中断通知。 为何不用串口,多简单啊!?

出0入0汤圆

发表于 2017-3-4 18:56:26 | 显示全部楼层
坐看标准答案

出0入0汤圆

发表于 2017-3-4 20:58:07 | 显示全部楼层
楼主还可以考虑在中间增加一个桥接芯片,你原来的MCU 和 linux板子都通过主机方式 与这个桥接芯片通信
而桥接芯片只需要实现两路从机接口就好了

出0入0汤圆

 楼主| 发表于 2017-3-4 21:01:29 | 显示全部楼层
sigma318 发表于 2017-3-4 10:28
加一个IO作为外部中断通知。 为何不用串口,多简单啊!?

已经改用串口了,谢谢

出0入0汤圆

 楼主| 发表于 2017-3-4 21:30:26 | 显示全部楼层
xrb2936 发表于 2017-3-4 20:58
楼主还可以考虑在中间增加一个桥接芯片,你原来的MCU 和 linux板子都通过主机方式 与这个桥接芯片通信
而桥 ...

这个也可以,可是我不是搞硬件的,到时候可以和他们说一下。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 15:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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