yick 发表于 2017-3-2 07:38:11

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

本帖最后由 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,我没找到相应的说法)

yick 发表于 2017-3-2 15:39:20

找到一个网友类似的问题:http://www.amobbs.com/forum.php?mod=viewthread&tid=5614201&highlight=linux%2Bi2c
貌似这样做的人真的很少。

wy2000 发表于 2017-3-2 08:14:10

在非实时操作系统的里面用GPIO模拟 IIc或者SPI等需要有时序的通讯基本不可能.基本上都需要用芯片的硬件来完成收发缓冲。

hongfadg 发表于 2017-3-2 08:24:36

linux轮训太浪费了,,如果没有硬件i2c,最笨的方法就是写一个驱动,当时程调用驱动读取数据时,,就休眠改进程,,,当收到起始信号时,进入中断,开始接收数据,,接收完成唤醒进程,,把数据传给进程!

jordonwu 发表于 2017-3-2 08:40:05

1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave不好模拟,建议用硬件IIC

墨非 发表于 2017-3-2 08:47:03

能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊

aozima 发表于 2017-3-2 09:04:53

果断在MCU上面做从机呀

yick 发表于 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处理器芯片这边就一个中断/轮询来检测到他们的数据,然后把这个数据传到其它进程当中去。)

yick 发表于 2017-3-2 09:47:13

aozima 发表于 2017-3-2 09:04
果断在MCU上面做从机呀

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

LinuxTux.China 发表于 2017-3-2 10:03:31

一定要IIC?换成UART还简单些,

jordonwu 发表于 2017-3-2 10:11:16

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

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

yick 发表于 2017-3-2 10:14:07

墨非 发表于 2017-3-2 08:47
能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊

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

yick 发表于 2017-3-2 10:15:54

LinuxTux.China 发表于 2017-3-2 10:03
一定要IIC?换成UART还简单些,

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

yick 发表于 2017-3-2 10:17:42

jordonwu 发表于 2017-3-2 10:11
你GPIO模拟从设备,你怎么知道有数据来了?

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

jordonwu 发表于 2017-3-2 11:07:32

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

你试试看看效果

sinc_mark 发表于 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是怎么理解?

jordonwu 发表于 2017-3-2 11:28:11

sinc_mark 发表于 2017-3-2 11:13
请问硬件IIC是怎么理解?

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

ALUMEI 发表于 2017-3-2 12:05:12

mcu 应该做从机。linux 做主机就好做了

yick 发表于 2017-3-2 12:12:43

ALUMEI 发表于 2017-3-2 12:05
mcu 应该做从机。linux 做主机就好做了

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

kelp 发表于 2017-3-2 12:15:17

加个芯片,从IIC转UART,Linux用UART方便多了

yick 发表于 2017-3-2 14:06:04

我把问题再原来的基础上又重新加了另一个方案,你们在帮我看一下。

coolhorse 发表于 2017-3-3 17:57:02

以前实现了ATMEGA16为从设备,LINUX为主设备,LINUX像访问EEROM一样访问从机

wanggoals 发表于 2017-3-3 19:46:12

如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单,比如NXP的LPC812和LPC824就支持 IIC Slaver详细可以看官方的例程。

yick 发表于 2017-3-3 23:01:02

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

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

yick 发表于 2017-3-3 23:02:26

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

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

sigma318 发表于 2017-3-4 10:28:41

加一个IO作为外部中断通知。 为何不用串口,多简单啊!?

HalenYU 发表于 2017-3-4 18:56:26

坐看标准答案

xrb2936 发表于 2017-3-4 20:58:07

楼主还可以考虑在中间增加一个桥接芯片,你原来的MCU 和 linux板子都通过主机方式 与这个桥接芯片通信
而桥接芯片只需要实现两路从机接口就好了

yick 发表于 2017-3-4 21:01:29

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

已经改用串口了,谢谢

yick 发表于 2017-3-4 21:30:26

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

这个也可以,可是我不是搞硬件的,到时候可以和他们说一下。{:smile:}
页: [1]
查看完整版本: MCU作为主机、Linux系统的开发板作为从机,通过IIC来进行通...