当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于ARM9和Linux的嵌入式打印终端系统

1 嵌入式打印终端系统 的设计原理                                      
  
 

嵌入式打印终端原理连接图如图1所示。主要由开发板、主机、打印机和扫描仪四部分组成。主机是一台PC机。开发板采用的是三星公司S3C2410开发板,ARM9的核,跑的是2.4内核版本的嵌入式Linux操作系统。扫描仪为超市等用的手持扫描仪。再加一台微型打印机接在开发板的GPIO口上。

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

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

2.1硬件开发平台S3C2410结构

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

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

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

gpio_c8~gpio_d15,gpi0_d0~gpio_d4。用这14根通用输入输出口连接微型打印机的并口。

 

[!--empirenews.page--]

同时查看打印机的电路手册和管脚定义,选用其STB选通线、ACK回答脉冲线、BUSY线、DATA0-DATA7数据线来与开发板的GPIO口相连,并初始化高低电平值。为了避免接线过紧互相干扰,制作一个接口板定义各引脚连接如图3所示。

至此,硬件的电路设计及连接基本完成。

 

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

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

3.1 打印机驱动的编写

Linux的设备分为块设备,字符设备和网络设备,该系统使用到的微型打印机属于字符设备,下面将具体说明如何设计打印机驱动。

3.1.1  定义设备名

#define DEVICE_NAME weida_printer

3.1.2  模块函数设计

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

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

函数原型devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT, 0, 0, S_IFCHR | S_IRUSR | S_IWUSR,  &weida_printer_fops, NULL);

其中,DEVICE_NAME为主设备名,weida_printer_fops为定义的一个数据结构,用来实现的文件操作,包括open、close、write等。

[!--empirenews.page--]

3.1.3  初始化打印端口

初始化打印机第一个要做的事情就是要对GPIO口进行初始化,初始化函数如下:

static void weida_init(void){
devfs_register(); /*注册设备驱动*/
set_gpio_ctrl(WEIDA_STB|GPIO_PULLUP_DIS|GPIO_MODE_OUT); /*设置STB口*/
    write_gpio_bit(WEIDA_STB,1);
    weida_printer_io_port_init();
/*设置其它IO口,以及赋初值*/ }

其中,WEIDA_STB为连接打印机选通口初始化为高电平,GPIO_PULL_DIS是设置是否需要上拉电阻,GPIO_MODE_OUT 设置GPIO口为输出口。最后使用module_init(weida_printer_init);采用模块方式加载驱动。[2]

3.1.4  接口函数设计

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

weida_printer_write ( )先对打印机是否在线,是否忙,是否准备好做进一步的判断,然后再进行打印。在打印的时候要注意每发一个字符要延迟150毫秒,因为如果打印数据发得过快打印机的来不急处理,所以要设置延时。

open/close函数打开/关闭文件,因为在LINUX下设备都是当作文件来操作的,所以需要open和close这两个接口函数。

3.2 扫描仪串口的设置

嵌入式移动打印终端中使用到的扫描仪是串口扫描仪,这种扫描仪相对于USB接口的扫描仪来说,控制较简单,在扫描仪扫描后,可以直接从串口读取数据。

3.2.1  串口设置[3]

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

设置串口参数:set_parity(int fd,int databits,int stopbits,int parity),databits为有多少个数据位,stopbit为设置多少个停止位,parity为奇偶校验位设置。设置串口波特率为9600,数据位为8位,一位停止位,没有校验位。

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

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

open(“/dev/ttyS1”,O_RDWR|O_NONBLOCK|O_NDELAY);其中,O_RDWR表示可读可写,O_NONBLOCK表示非堵塞模式,O_NDELAY表示没有延迟,立即发出去。

3.2.3 客户端和服务器的socket编写

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

3.4 主应用程序的设计

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

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

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

[!--empirenews.page--]

两个线程的核心代码如下:
void thread1(void) {
    打开串口;设置串口;建立连接;
    while(1)    {
        sem_wait(&sem1);
        从串口读书据;
用clinetsocket发送出去;
        sem_post(&sem2);}
}
void thread2(void)  {
    打开打印机设备;
    while(1)    {
        sem_wait(&sem2);
        接收数据;扔给打印机;
        sem_post(&sem1);    }
}

如此可以使两个线程得以同步运行,并可以执行多次扫描和打印任务。
 
本文作者创新点及其经济效益:本系统具有移动性强,功耗低等特点,而且与以往传统的用PC 机实现的打印终端相比,还具有低成本优势。能广泛地应用于超市收银系统,银行自动存取款机,等各种工业领域。笔者试验了一下把802.11g的无线网卡移植到开发板上,并成功实现了和主机的无线通信,使得该系统更加便携。根据对南京各大学校区内超市的研究调查,此系统估计可产生50万元的经济效益。

赵远东导师评论:该同学在书写这篇文章的过程中,参考大量中英文文献资料,通过对ARM开发板的结构、设计等方面的认知,了解Linux驱动的基本框架,设计出了接口板电路实现了移动终端打印功能,有一定的创新思想和经济价值。

参考文献:
[1]  SAMSUNG. S3C2410A 200MHz&266MHz 32-BIT RISC MICROPROCESSOR USER’S MANUAL [EB/OL]. http://www.samsung.com/, 2004-03. 35,367-408
[2]  CORBET J, RUBINI A. LINUX设备驱动程序(第三版)[M]. 中国电力出版社, 2006. 46-74 TP316.81
[3]  孙琼. 嵌入式LINUX应用程序开发详解[M]. 人民邮电出版社, 2006. 184-191 TP316.89
[4]  田家林,陈利学,寇向辉. LINUX嵌入式操作系统在ARM上的移植[J]. 微计算机信息, 2007,4-2:P60-62.
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

空中下载技术(Over-the-Air Technology, OTA)是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。本文采用了swupdate的方式进行ota升级,swupdate是一个基...

关键字: 核心板 嵌入式 Linux平台

新增 IEEE®1588 标准配置文件,满足电源和 5G专用网络同步要求

关键字: 嵌入式 5G 电源

加利福尼亚州圣克拉拉市—2024年4月30日―AMD(NASDAQ: AMD)今日公布2024年第一季度营业额达55亿美元,毛利率为47%,经营收入3600万美元,净收入1.23亿美元,摊薄后每股收益为0.07美元。基于...

关键字: 嵌入式 PC 人工智能

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

为了满足日益增长的数据处理需求,铁威马NAS推出了全新的性能巅峰2024年旗舰之作F4-424 Pro,并搭载了最新的操作系统--TOS 6。这款高效办公神器的问世,无疑将为企业和专业人士带来前所未有的便捷与效率。

关键字: 存储 Linux 服务器

2024年4月11日,中国——意法半导体的ST25R100近距离通信(NFC)读取器芯片独步业界,集先进的技术功能、稳定可靠的通信连接和低廉的成本价格于一身,在大规模制造的消费电子和工控设备内,可以提高非接触式互动功能的...

关键字: 嵌入式 数据读取器 芯片

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

深圳2024年4月23日 /美通社/ -- 全球AI解决方案与工业级存储领导品牌宜鼎国际 (Innodisk)持续深化边缘AI布局,今(23)日发表全球首创"MIPI over Type-C"独家技术,让旗下嵌入式相机模...

关键字: AI 嵌入式 相机

为增进大家对嵌入式主板的认识,本文将对嵌入式主板以及嵌入式主板常见问题及其解决方法予以介绍。

关键字: 嵌入式 指数 主板

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统
关闭
关闭