这篇文章是给谁看的?
给那些有一定的51,PIC 等单片机基础的,并且对树莓派的通用输入输出(GPIO)数据传输有兴趣的菜鸟们(noobs!),比如我。
我能从这篇文章中学到嘛?
这篇文章是新手入门向的文章。有许多有用的链接,以及资源。你看从这里学到(复习?)很多硬件接口基础知识。
这文章是你写的?
不,不。我是在搜索GPIO parallel时无意找到的博文,觉着非常好翻译到自己的博客,方便以后查询,顺便给大家个”福利”。原文(http://jeffskinnerbox.wordpress.com/2012/12/05/raspberry-pi-serial-communication/)
哦,这样啊那你为什么要搜GPIO parallel传输呢?
我想用三个RPI同时(要同步的哦)传输视频流到PC上(做图像拼接)。正在考虑传输方式是USB 或者是GPIO(parallel)。 USB当然是最简单的方法了,但是问题是画质不稳定,而且延迟严重。所以考虑用编码以后用GPIO进行并行传输。
如果有大大能给点指导,我给你捡肥皂哦~~
a
<-------------------我是华丽的分割线-------------------------->
如果你对PIC或者51等单片机有相当的了解,可以直接跳过前面的回顾部分,进入下一部分。
回顾:
首先要了解的是:数据是怎样在RPI,或者说大家平常用的电脑,里传输的。在大多数情况中,总线或者说数据总线是用来传输数据的。
总线设计师的工作就是设计电路,用来把数据从这个电路传输到另一个电路。这些数据可以以串行或者并行的方式进行传输。
·
串行总线(serialbus):最不消耗材料的传输方式。每次传输1个比特。这就是所谓的串行数据传输。数据在传输前是并行的。为了能够进行串行传输,这些数据必须先转换成串行(serial),在接收端再转换成并行(parallel).通常都有专门的电路来完成这些工作,就是所谓的SerDes(serializer/deserializer)。因为集成电路的针数(pin)大大增加了电路的成本,所以为了减少针数,在速度不是非常重要的情况下,很多厂商选择使用串行数据线来传输数据。主要的几种串行总线有:
o Serial Peripheral Interface (SPI)
o Inter-Integrated Circuit(I2C)
o UNI/O
o 1-wire
· 并行总线(parallel bus)从某种角度来说 是更加有效的数据传输手段。 但是并行传输有着传输速度和距离的限制。如果超过了一定的速度或者距离,数据传输将变得不可靠。常见的并行总线标准有以下几种:
o Parallel Bus Inteface(PBI)
o Peripheral Component Interface(PCI)
o Samll Computer Systems Interface(SCSI)
o VMEbus
o Rambus 常用于内存数据传输
RPI GPIO:
从名字上可以看出来,GPIO(通用输入输出接口)的功能可以通过程序来设定,已达到一定的目的。GPIO的针脚是
直接和处理器核心连接的,RPI开发者已经为我们制定了
几套GPIO的功能方案。(在RPIBCM2835GPIOs 页面里可以看到一张巨大的表格,注意横行黄 {MOD}的字,比如ALT0,ALT1,ALT2等等,都是可选的方案alternatives0,1,2..)。有些方案是非常有用的。在RPI启动的时候确定了使用哪一套方案。默认的是ALT0,以下是ALT0的示意图:
更改方案的方法如下:
volatile unsigned *gpio;
#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |=(((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
下面的代码把GPIOg转换成ALT0
INP_GPIO(g);
SET_GPIO_ALT(g,0);
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
这个链接告诉你怎样改变GPIOpin 的功能stepby step!
实际上,所有的26个针脚都可以独立提供不同的可选功能。关键还是看你怎么进行设置了!
除此之外,脉冲编码调制PCM(Pulse-code modulation), pin18 & 21 可以用数字信号来表示模拟信号。这个通常用来控制灯光的强度或者是电机的转速。