1、精简ISA总线GPIO扩展原理
在工业领域,GPIO的应用非常广泛,英利嵌入式Linux工控板上自带有16路GPIO。然而在实际应用中,经常需要多于16路的GPIO作为控制或者数据信号使用,这时候可以通过英利精简ISA总线进行GPIO扩展。采用最普遍的逻辑芯片74HCT138、74HCT245和74HCT273即可以扩展出满足需求数量的GPIO。此外,由于上述芯片的成本极其低廉,单片采购价只有几角钱,因此在满足功能需求的同时,也有效地控制了产品成本。
采用精简ISA总线进行GPIO扩展的方法是:使用74HCT138对片选控制信号CS1#、读信号RD#、写信号WE#以及地址线SA0-SA2进行地址译码,产生不同地址偏移量的片选信号,应用程序通过对不同地址的读写操作来控制相应的GPIO(GPIO通过74HCT245或者74HCT273连接到数据线SD0-SD7)。
2、DIN扩展示例
如图所示,地址译码产生了8个读片选信号,每一个信号通过控制一片74HCT245可以操作8路GPIO,这样,一次译码之后可以扩展出64路DIN。本图中只使用了RD0#和RD1#两个片选信号,客户如有需要可以使用RD2#-RD7#继续进行扩展。
3、DOUT扩展示例
数字输出DOUT的扩展原理图如下所示:
注:以上图片上传到红联Linux系统教程频道中。
如图所示,地址译码产生了8个写片选信号,每一个信号通过控制一片74HCT273可以操作8路GPIO,这样,一次译码之后可以扩展出64路DOUT。本图中只使用了WE0#和WE1#两个片选信号,客户如有需要可以使用WE2#-WE7#继续进行扩展。
综上所述,通过一次地址译码能够扩展出64路输入、64路输出一共128路GPIO,可以满足绝大多数工业控制领域的需求。而这128路GPIO扩展所需的器件成本只有十几元,相对于工控整机产品而言,几乎可以忽略不计。
此外需强调的是,如果用户扩展出的GPIO是用做不同的功能,那么最好将不同的功能单元完全分开。
比如,需要进行如下扩展控制:
3路DIN
2x3矩阵键盘
5个LED
4路继电器单元
7路DOUT
则分配思路如下:由于有5个功能单元,每一个功能单元所需的GPIO都不超过8个,因此使用2片74HCT245分别用于矩阵键盘、DIN;4片74HCT273分别用于矩阵键盘、LED、继电器、DOUT,读信号用RD0#和RD1#,写信号用WE0#-WE3#。这样,应用程序分别独立控制各功能单元,可以加快开发进度,提高开发的成功率和后期维护效率;而多使用几个芯片,并不会给开发成本增加任何负担。
上述示例的具体分配方案如下:
1片74HCT245,使用片选信号RD0#,接矩阵键盘的输入信号
1片74HCT245,使用片选信号RD1#,接3路DIN
1片74HCT273,使用片选信号WE0#,接矩阵键盘的输出信号
1片74HCT273,使用片选信号WE1#,接LED
1片74HCT273,使用片选信号WE2#,接继电器
1片74HCT273,使用片选信号WE3#,接7路DOUT
另需注意:
1、建议将地址偏移量为0的端口留作矩阵键盘使用,以便于系统自动加载驱动和应用程序的编写。
2、由于英利提供的例程均采用CS1#作为片选信号,因此建议客户也使用CS1#进行扩展,以方便前期测试。