您的位置  > 互联网

基于核总线的嵌入式打印终端系统的硬件设计原理

嵌入式打印终端的连接示意图如图1所示,主要由开发板、主机、打印机和扫描仪四部分组成。 主机是一台PC。 开发板采用ARM9内核的三星开发板,运行2.4内核版本的嵌入式Linux操作系统。 该扫描仪是超市等使用的手持式扫描仪。 添加微型打印机,连接到开发板的GPIO口。

工作流程为:开发板从串口读取扫描仪数据,然后通过网口将数据发送到主机进行检索处理。 开发板等待接收到主机处理后的数据,然后转发给打印机打印出信息。

2 嵌入式打印终端系统的硬件设计

2.1 硬件开发平台结构

三星的开发板采用基于32位RISC架构的核心。 其增强型MMU单元和AMBA总线可支持WinCE、Linux等实时操作系统。 片上资源丰富,接口众多,包括LCD控制器、USB Host、网络芯片、SD卡、3个UART通用异步串口等设备接口。 [1]

2.2 打印机与开发板接口电路设计

我们使用的微型打印机使用并行接口。 由于开发板不提供并口,所以必须自己设计板子接口电路,将打印机的并口连接到我们的嵌入式开发板上。 查看电路原理图。 由于该系统不需要 LCD 屏幕,因此可以修改板上用于 LCD 连接的 GPIO 端口。 根据LCD电路引脚的定义以及板上的LCD插槽,如图2所示,找到14个空闲的GPIO端口:

〜,〜。 使用这14个通用输入输出端口连接微型打印机的并行端口。

[! - 。页 - ]

同时查看打印机的电路手册和引脚定义,选择其STB选通线、ACK响应脉冲线、BUSY线、DATA0-DATA7数据线连接到开发板的GPIO口,并初始化高电平和低电平。低水平值。 为了避免由于布线过紧而相互干扰,制作了接口板来定义引脚连接,如图3所示。

至此,电路设计和硬件连接就基本完成了。

3 嵌入式打印终端系统软件设计

软件平台采用基于2.4内核的嵌入式Linux系统。 使用的交叉编译工具包是.95.3.tgz(包括arm-linux-gcc等)。

3.1 编写打印机驱动程序

Linux设备分为块设备、字符设备和网络设备。 本系统中使用的微型打印机是一种字符设备。 下面将详细说明如何设计打印机驱动程序。

3.1.1 定义设备名称

#

3.1.2 模块功能设计

本系统采用模块化的方式加载驱动程序,因此必须实现模块的初始化函数和卸载函数。 使用 devfs 注册打印机。

初始化函数通过函数向系统注册设备。

函数原型 (NULL, , , 0, 0, | | , &, NULL);

其中,主设备名是定义好的数据结构,用于实现文件操作,包括打开、关闭、写入等。

[! - 。页 - ]

3.1.3 初始化打印端口

初始化打印机时首先要做的就是初始化GPIO端口。 初始化函数如下:

无效(无效){

(); /*注册设备驱动*/

(||); /*设置机顶盒端口*/

(,1);

();

/*设置其他IO口并赋值初始值*/ }

其中,口初始化为高电平用于连接打印机,设置是否需要上拉电阻,设置GPIO口为输出口。 最后,使用(); 以模块模式加载驱动程序。 [2]

3.1.4 接口功能设计

ioctl()函数主要完成打印机字体、行距等参数的设置。 在设计过程中,必须解决如何传输用户数据和内核数据。 从用户态读取数据,然后在内核态运行。 您可以使用函数来传输数据。

( ) 打印前首先进一步判断打印机是否在线、忙碌、就绪。 打印时要注意每个发送字符有150毫秒的延迟,因为如果打印数据发送太快,打印机将无法紧急处理,所以必须设置一个延迟。

打开/关闭函数打开/关闭文件。 由于LINUX下的设备都是以文件的方式进行操作的,所以需要open和close这两个接口函数。

3.2 扫描仪串口设置

嵌入式移动打印终端使用的扫描仪是串口扫描仪。 与USB接口扫描仪相比,该扫描仪控制更简单。 扫描仪扫描完成后,可以直接从串口读取数据。

3.2.1 串口设置[3]

设置串口速度函数:(int fd,int speed),其中fd为打开的设备文件,speed为速度。

设置串口参数:(int fd、int、int、int)、有多少个数据位、设置多少个停止位、奇偶校验位设置。 设置串口波特率为9600、8位数据位、1位停止位、无奇偶校验位。

3.2.2 编写读取扫描仪数据的函数

首先打开设备文件。 本系统使用的串口为串口2,因此开启函数为:

打开(“/dev/ttyS1”,||); 其中,表示可读写,表示非阻塞模式,表示没有延迟,立即发送出去。

3.2.3 客户端和服务器端准备

嵌入式打印终端采用C/S模式,以PC机作为服务器,开发板作为客户端,通过以太网连接。 客户端建立连接寻找PC上的服务程序。 PC 还运行一个用于请求和绑定的程序。 采用TCP连接方式。

3.4 主应用程序设计

开发板上的应用程序Main函数注册了两个线程p1和p2,以及两个全局数组c1和c2。

线程p1将从串口读取的数据放入c1中,然后send直接从c1中取出数据发送到服务器。 线程p2负责将数据放入c2数组中,然后直接从c2中取出数据交给打印机打印。

这里线程使用了两个信号量,初始化为:(&sem1,0,1); (&sem2,0,0); [4]

[! - 。页 - ]

两个线程的核心代码如下:

无效(无效){

打开串口; 设置串口; 建立连接;

而(1){

(&sem1);

从串口读取数据;

用于发送;

(&sem2);}

无效(无效){

打开打印机设备;

而(1){

(&sem2);

接收数据; 扔到打印机;

(&sem1); }

这允许两个线程同时运行并执行多个扫描和打印任务。

作者的创新点及其经济效益:该系统具有移动性强、功耗低的特点,与用PC实现的传统打印终端相比还具有低成本优势。 可广泛应用于超市收银系统、银行自动柜员机等工业领域。 笔者尝试将802.11g无线网卡移植到开发板上,成功实现了与主机的无线通信,使得系统更加便携。 据对南京各大学校园超市的调研,该系统预计可产生经济效益50万元。

赵远东导师点评:在写这篇文章的过程中,该学生参考了大量的中英文文献,通过了解ARM开发板的结构和设计,了解了Linux驱动的基本框架,并设计了接口板。 该电路实现了移动终端的打印功能,具有一定的创新思路和经济价值。

参考:

[1] . & 32 位 RISC 用户的 [EB/OL]。 ,2004 年 3 月。 35,367-408

[2]J、A.LINUX设备驱动程序(第三版)[M]. 中国电力出版社,2006.46-.81

[3] 孙琼. 嵌入式LINUX应用开发详解[M]. 人民邮电出版社,2006.184-191 TP316.89

[4] 田家林,陈立学,寇向辉。 LINUX嵌入式操作系统在ARM上的移植[J]. 微机信息,2007,4-2:P60-62。