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,我没找到相应的说法) 找到一个网友类似的问题:http://www.amobbs.com/forum.php?mod=viewthread&tid=5614201&highlight=linux%2Bi2c
貌似这样做的人真的很少。 在非实时操作系统的里面用GPIO模拟 IIc或者SPI等需要有时序的通讯基本不可能.基本上都需要用芯片的硬件来完成收发缓冲。 linux轮训太浪费了,,如果没有硬件i2c,最笨的方法就是写一个驱动,当时程调用驱动读取数据时,,就休眠改进程,,,当收到起始信号时,进入中断,开始接收数据,,接收完成唤醒进程,,把数据传给进程! 1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave不好模拟,建议用硬件IIC 能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊 果断在MCU上面做从机呀 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处理器芯片这边就一个中断/轮询来检测到他们的数据,然后把这个数据传到其它进程当中去。) aozima 发表于 2017-3-2 09:04
果断在MCU上面做从机呀
开始就没有这样规定啊,我倒是想这样做,很方便。 一定要IIC?换成UART还简单些, yick 发表于 2017-3-2 09:46
这个linux4.1之前不支持IIC Slave(我也不太清楚,一会儿再查查看),平时我就是在ARM的主频芯片上用gpio来 ...
你GPIO模拟从设备,你怎么知道有数据来了? 墨非 发表于 2017-3-2 08:47
能改SPI 吗? linux 下有GPIO模拟SPI的 bitbang啊
SPI以后也是有的,我先搞一下IIC的 LinuxTux.China 发表于 2017-3-2 10:03
一定要IIC?换成UART还简单些,
因为公司的部分代码都是用的IIC总线来通信的(硬件工程师爱这样设计),也是公司的习惯性设计吧,而现在跑linux系统是后来加进来的 jordonwu 发表于 2017-3-2 10:11
你GPIO模拟从设备,你怎么知道有数据来了?
检测高低电平来判断是否有数据,一般单片机上都算是实时的,linux可否这样做 yick 发表于 2017-3-2 10:17
检测高低电平来判断是否有数据,一般单片机上都算是实时的,linux可否这样做 ...
你试试看看效果 jordonwu 发表于 2017-3-2 08:40
1. 首先linux4.1之前是不支持IIC Slave的,4.1之后的加了slave framework
2. IIC master你可以模拟,slave ...
请问硬件IIC是怎么理解? sinc_mark 发表于 2017-3-2 11:13
请问硬件IIC是怎么理解?
就是这个IIC你不是通过IO口自己去模拟的,而是使用MCU自己带的IIC模块 mcu 应该做从机。linux 做主机就好做了 ALUMEI 发表于 2017-3-2 12:05
mcu 应该做从机。linux 做主机就好做了
公司有产品是以MCU为主的,以前都是做主机,现在都习惯了,如果改动的话,可能牵扯比较大 加个芯片,从IIC转UART,Linux用UART方便多了 我把问题再原来的基础上又重新加了另一个方案,你们在帮我看一下。 以前实现了ATMEGA16为从设备,LINUX为主设备,LINUX像访问EEROM一样访问从机 如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单,比如NXP的LPC812和LPC824就支持 IIC Slaver详细可以看官方的例程。 wanggoals 发表于 2017-3-3 19:46
如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单, ...
哦,那个方案现在放弃了,不过还是谢谢{:smile:} wanggoals 发表于 2017-3-3 19:46
如果你确实要使用IIC,建议Linux修改为master,而MCU设置为Slaver,找到硬件支持IIC Slaver的MCU比较简单, ...
都建议linux为master,看来这个方案真的有点难 加一个IO作为外部中断通知。 为何不用串口,多简单啊!? 坐看标准答案 楼主还可以考虑在中间增加一个桥接芯片,你原来的MCU 和 linux板子都通过主机方式 与这个桥接芯片通信
而桥接芯片只需要实现两路从机接口就好了 sigma318 发表于 2017-3-4 10:28
加一个IO作为外部中断通知。 为何不用串口,多简单啊!?
已经改用串口了,谢谢 xrb2936 发表于 2017-3-4 20:58
楼主还可以考虑在中间增加一个桥接芯片,你原来的MCU 和 linux板子都通过主机方式 与这个桥接芯片通信
而桥 ...
这个也可以,可是我不是搞硬件的,到时候可以和他们说一下。{:smile:}
页:
[1]