《嵌入式系统》设计方案

上传人:suij****uang 文档编号:158510390 上传时间:2022-10-05 格式:DOCX 页数:16 大小:155.69KB
返回 下载 相关 举报
《嵌入式系统》设计方案_第1页
第1页 / 共16页
《嵌入式系统》设计方案_第2页
第2页 / 共16页
《嵌入式系统》设计方案_第3页
第3页 / 共16页
点击查看更多>>
资源描述
word 格式-可编辑-感谢下载支持移动打印终端终嵌入式系统设计方案阅读目录一 项目概述 2二 系统总体架构 22.1.1 各功能部件作用2221 手持式扫描仪3222 嵌入式开发板3223 微型打印机的选型4224远程服务器5三 软/硬件设计 532 硬件设计6321 嵌入式开发板和扫描仪的连接6322 嵌入式开发板和远程服务器的连接 6323 嵌入式开发板和微型打印机的连接 6四 各驱动程序的设计(软件设计) 741 打印机驱动的设计7411 定义设备号和设备名74.1.2 设备驱动初始化函数和清除函数74编译扫描仪制备驱动115.加载设备114.1.3 扫描仪驱动设计124.1.4 网络通信模块及服务器的开发13系统应用程序设计14五 系统调试 15项目概述1. 1系统设计的必要性与PC终端的比较在信息社会中,打印终端应用非常广泛,比如超市的收银系统、图书管的借还书系统、移动营业厅的 话费打印系统等场合,我们都可以看到打印终端的身影。传统打印终端通常都是由 PC 加上一个微型打 印机构成,这种架构的打印终端价格比较昂贵,体积庞大,移动笨拙,使用十分不方便。随着嵌入式技术的发展,许多原来基于PC的应用都纷纷转向基于嵌入式技术来实现。基于嵌入式技 术的产品具有非常明显的优势,如价格便宜、功耗低、体积小及移动方便等。 具体到打印终端这个产品上来说,可以从下表看出基于 PC 的打印终端和基于嵌入式的打印终端在各个方面的差异性。基于PC的打印终端基于嵌入式的打印终端价格几千兀不等几百兀左右体积很大非常小性能强较强开发方便性易较易移动方便性难易1. 2 系统的主要功能本项目实例中拟开发的嵌入式移动打印终端是解决从数据输入、数据处理和数据输出的一体化系统 它提供下列几个功能 数据录入功能:支持从扫描仪端录入数据; 通过网络到数据库查询; 数据打印功能二 系统总体架构嵌入式移动终端是一套完整的嵌入式应用系统,包括和硬件和软件两部分,这一节先说一下硬件方面的设计。2. 1 系统硬件组成的部件 数据输入部件(手持扫描仪)完成数据输入功能; 数据处理部件(嵌入式开发板和远程服务器)完成数据处理任务 数据输出部件(微型打印机)完成数据打印功能;各个部件之间的关系如图q数据输入部件word 格式-可编辑-感谢下载支持通常一个系统可以有很多种输入数据的途径,常用的输入设备有键盘鼠标等.在嵌入式移动打 印终端中,只采用了扫描仪来完成数据的输入工作,当然系统如果想要实用化,应该再加上键盘等其 它输入部件,但在这里就只用为个来设计了.Q数据处理部件数据处理部件是一整个应用系统的核心,它的主要任务是得到扫描仪传来的数据信息,然后连 接远程服务器,将数据传送到远程服务器端,完成查询任务后,从远程服务器端得到结果,然后将结果 送给微型打印机打印.所以,数据处理部件包括嵌入式开发板和远程服务器两个部分。嵌入式开发板和远程服务器 之间通过网络线相连。Q数据输出部件在超市收银系统中,收银员最后的一个动作总是打印顾客的单据。同样,在嵌入式移动打印终 端系统中,最后一个动作也是将查询到的结果通过一个微型打印机打印出来。2 2 对硬件的选择221 手持式扫描仪该扫描仪主要完成的功能 其实是条码扫描的任务。条码扫描是用来扫描条形码的设备,利用光 学原理,把条形码的内容解码后通过数据线或者无线的方式传输到电脑或者别的设备中。 根据实际情况,现在拟定了一个关于扫描仪的规格参数:光学规格光学系统:2048PixelCCD扫描速度:每秒100次光源:红色可见光LED读取条码宽度:可读至90mm扫描距离:020mm接口类型 支持键盘和RS-232C接口 条码种类: WPC( EAN-13,EAN-8,UPC-A,UPC-E)Code 128 Code39Coda bar Code 11,Code39,Code39 extened,Interleaved 2of 5,Code 32,EAN-128,ChinIATA,ChinIATA,MSI/PLESSYSTD 2 of 4,Martix 2of 5,ItalianPhamacy Code Industrial 2 of5,BC-412,中国邮政 码电气规格电压:5V DC操作规格:6070 mA待机电源:2030mA其它操作法度:0440度 传输线:1.75M 尺寸:长 166mmX 宽 90nmX 高 32nm222 嵌入式开发板嵌入式开发板是本系统的核心部件,它担负着整个系统中心枢纽的重担,同时,它的选型也直接影响 到上层操作系统和其它部件的选型。所以,在选择这个部件时,要站在整个系统的高度来进行。word 格式-可编辑-感谢下载支持 在设计嵌入式移动打印终端系统时,根据接口类型、所支持的操作系统、性价比这几个要素来选取开 发的类型与参数,具体如下表所示:硬件参数软件参数1、米用三星公司的 S3C2410,主频可达 203MHz2、64MB 的 SDRAM,由两片 K4S561632 组 成,工作在32位模拟式下3、64MB Nand Flash,采用的是 K9F1208,可 兼容 16MB,32MB 或 128MB;2MB 的 Nor Flash,米用的是SST39VF1601,工作在16 位模式下4、10Mbps以太网接口,采用的是 CS8900Q3,带传输和连接指示灯5、LCD和触摸屏接口6、1 个 USN Host,S3C2410 内置的,符合 USB1.1; 一个 USB Device,S3C2410 内置 的,符合USB1.17、支持音频输入和音频输出,音频模块由 S3C2410的II S音频总线接口和 UDA1341音频编译解码器组成,模块还 集成了一个MIC,用于音频输入8、2路URART串行行口,波特率可高达 115200bps,并具有RS-232电平转换电路9、SD 卡接口,兼容 SDMemory Card Protocol 1.010、蜂鸣器,4个LED灯,4个按键11、Embedded-ICE(20 脚标准 JTAG)接 口和并口式JTAG接口,支持ADS、SDT 软件的下载和调试,以及FLASHf烧写测试代码,启动引导源代码BIOS和下载 烧写工具 Linux for 2410的内核源码包,以及内核父 叉编译工具,可运行的根文件系统及根文 件系统制作工具 Qt-embedded-2.3 和 qtopia-free-源码,应用 程序交叉编译器 winCE4.2NET 板级支持包 BSP for 2410, 以及已编译好的WINCE镜像文件 ST2410底板和核心板电路原理图 ST2410开发板使用手册实用工具ST2410 开发板相关参数223 微型打印机的选型微型打印机腹胀荣达科技RD-M系列微型打印机,该款采用独特的面板式嵌入结构,便可将整个打印机 固定在仪表面板上,操作简单、方便。下面是它的一些参数指标 打印方式:针打,针式撞击点阵打印:热敏,热敏加热热点阵打印 打印速度:针打,1.0 行/秒,0.7行/秒,0.4 行/秒:热敏,35 毫米/秒 分辩率:针打,8 点/毫米, 384点/行。 打印宽度:针打,16/24/40;热敏,32。打印字符:全部448个字符及图块,包括96个ASCII字符,352个希腊文德文俄文法文等字母, 日文片假名,部分中文汉字,数字符号,打印字符,块图符;32 个用户自定义字符。国标一二级汉字库 中全部汉字和西文字、图符共有817 个。字符大小:西文,5X7;块图符,6X8点阵;用户自定义字符,汉字,24X24,点阵,16X16word 格式-可编辑-感谢下载支持 控制板;采用模块化驱动控制电路,有效保护打印头的绝对安全;专门的复位控制电路、电源监测 电路以及近乎完美的软硬件看门狗控制的电路,确保打印机不死机、不乱打。 控制命令:通用 ESC/p 打印命令。打印缓存:32KB。224远程服务器远程服务器用于存在放在型数据库,它通过网络接口接收嵌入式开发板发来的数据,然后进行查询 更新等处理操作,最后把结果再传给嵌入式开发板。所以,远程服务器必须具备较强的数据存储能力和 网络通信能力。要本系统中我们可以用一台普通PC来完成这个功能。三 软/硬件设计31 设计的流程 嵌入式移动打印终端系统设计开发可以分为三5 个模块: 开发环境的建立 硬件的设计; 扫描仪驱动的设计; 打印机驱动的设计 服务器数据库的设计及通信模块的开发。设计思想是:从硬件到软件,从底层到上层的方法。流程图如下32 硬件设计由于本开发系统中的核心部件采用已有的开发板,硬件设计的任务就大为简单,其核心任务就转化为 通过嵌入式开发板将各个部件连接在一起即可。321 嵌入式开发板和扫描仪的连接这一步骤是要把电路设计的图给出的,但是由于现在的设计都是从理论上做而已,没有真实的开发板, 所以画不出来电路图。322嵌入式开发板和远程服务器的连接这一步骤是要把电路设计的图给出的,但是由于现在的设计都是从理论上做而已,没有真实的开发板, 所以画不出来电路图。323 嵌入式开发板和微型打印机的连接这一步骤是要把电路设计的图给出的,但是由于现在的设计都是从理论上做而已,没有真实的开发板,所以画不出来电路图。四 各驱动程序的设计(软件设计)41 打印机驱动的设计按照编写嵌入式驱动 的方法,打印机驱动的编写可分为下列的几个环节: 定义设备号和设备名 实现设备驱动初始化函数和清除函数;设计所要实现的文件操作,定义file_operation结构,实现所需的底层接口调用函数; 将驱动编译到内核或编译成模块,用 insmod 命令加载; 生成设备节点文件。411定义设备号和设备名#define DEVICE_NAME “weida_printef#define WEIDA MAJOR234设备驱动初始化函数和清除函数Module_init(weida_printf_init); Module_exit(weida_print_exit); MODULE LICNSE(“GPL”);其中,在初始化函数 weida_printf_init 中完成设备注册任务和微型打印机端口初始化任务 具体函数如下:static int_weida_print_init(void)int ret;ret=register_chrdev(WEIDA_MAJOR,DEVICE_ANME,&weida_print_fops); if(tetj) printk(%d,data_bit);write_gpio_bit(gpio_data_tabj,data_bit&0 x01) udelay(2);DATA_READY(O);UDELAY(2); DATA_READY(1);每次发数据时都要延迟几毫秒,以防向打印机发送数据过快,打印机来不及处理而产生丢失数据现象, 所以要设置。下面具体分析如何编写这些惛层接口操作函数。(1)weida_printer_open/weida_printer_close;打开 / 关闭打印机:该函数完成打印操作,在该函数中,首先判断打印机是否在张,是否忙。是否准备好,在打 印机准备的情况下完成数据打印任务。函数的具体实现代码如下:static int weida_printer_write(struct file,const char *buffer,size_t cout,loff_t *ppos)unsigned char *kbuf;int ready;ready = read_gpio_bit(WEIDA_BUSY);if(ready)return -EBUSY;ready = read_gpio_bit(WEIDA_SELECT);if(!ready)return -EAGAIN;ready = read_gpio_bit(WEIDA_ERROR);if(ready)return -EINVAL;kbuf = malloc(count+1,GPF_KERNEL);memeset(kbuf,0,count+1) if(copy_from_user(kbuf,buffer,count)printk(copy form user wrong!);kfree(kbuf); return -EFAULT; while(*kbuf!=O)tyupe data(*kbuf);w/ord格式-可编辑-感谢下载支持while(read_gpio_bit(WEIDA_ACK);prinntk(”c,*kbuf);kbuf+;kfreee(kbuf);return count;打印时用函数copy_from_user(kbuf,buffer,count)将数据从用户态到核心态。Q weida_printer_ioctl通过该函数对打印机的字体、行距等属性进行设置,函数的具体实现代码如下:static int weida_printer_ioct(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)int mum;switch(cmd)case WEIDA_IOCSFONTSPACE;copy_from_user (&num,&arg,sizeof num);SET_FONT_SPACE(num);break;case WEIDA_IOCSLINESPACE;COPY_from_user(&num,& arg,sizeof num);SET_LINE_SPACE(NUM);break;case WEIDA_IOCSLINESPACE;COPY_from_user(&num,& arg,sizeof num);break;case WEIDA_IOCSUPLINE;copy_from_user (&num,&arg,sizeof num);SET_UPLINE(num);break;case WEIDA_IOCSCHARACTER1;select_character1;break;case WEIDA+I0CSD0T_MATR1X;COPY_FROM_USERT(NUM,&ARGSIZEOF NUM);case WEIDA_IOCSLINESPACE;COPY_from_user(&num,& arg,sizeof num);break;case WEIDA_IOCSUPLINE;copy_from_user (&num,&arg,sizeof num);SET_UPLINE(num);break;case WEIDA_IOCSCHARACTER1;select character1;w/ord格式-可编辑-感谢下载支持break;case WEIDA+IOCSDOT_MATR1X; COPY_FROM_USERT(NUM,&ARGSIZEOF NUM);(2) weida_print_select该函数用来选择打印机,函数的具体实现代码如下:static unsigned int weida_printer_select(struct file *file,struct poll_table_struct *) int ready;ready = read_geipo_buf(WEIDA_BUSY);if(!ready)return l;poll_wait(file,&weida_printer_wait,wait); printk(select);return ;4编译扫描仪制备驱动假设上述微型打印机驱动代码存放在weida_printer.c和weida_printer.h中并且放在weida_printer目录下。 在该目录 下编写Makefile文件,内容如下:CROSS = artmWeida-printer.O.weida_printer.c weida_printer.h$CROSS gcc-d_kerner_DMODULE-I/home/lichao/-rmk7/include-c -o weida_printer weida_printer.cCleanM -rf weida_printer 在/weida printer目录下,执行下列命令编译:make在当前目录下就可以得到驱动模块文件weida_printer.o5.加载设备编译好驱动模块后,可以通过网络将 weida_printer.o 文件传输到嵌入式开发板,在嵌入式开发板超级终 端环境下执行下列命令将打印机设备运动模块加载内核:Inmsod weida_printer.o生成设备节点:Mknod/dev/weida_printer c23406.打印机驱动测试程序设计通过上面的几个步骤,打印机驱动模块已经注册到内核,在/dev目录下可以打到weida_printer设备,那么 编写的设备驱动模块是否正确,能否完成所要求的功能呢?这些必须编写测试程序来进行测试.下面是一个简单的测试程序代码,详细的功能测试代码可以在该程序的基础之上进行扩充.int main(void)w/ord格式-可编辑-感谢下载支持int weida_fd,ret;char *data = Hell, Welcome to use weida printer; weida_fd = open(/dev/weida_printer.O_WRONLY); if(weida_fdvO)perrof(open device buttons);exit(1);ret write(weda_fd,data,strien(data);if(ret!=strlen(data)perror(print worng/n); ioctl(weida_fd,WIDA_IOCSLNESPACE,l); sleep(1);ret = write(weida_fd,data,strlen(data);if(ret!= strlen(data)perror(printf wrongn);clsoe(weida_fd);return 0;扫描仪驱动设计扫描仪直接接到嵌入式开发板串口上,对它的控制非常简单,只需要将串口 1的波特率属性配置成和扫 描仪一致,扫描仪扫描后直接可以从串口读出数据,读数据就为扫描仪扫到的条形码.1.编写串口设置函数Set_speed(int fd,int speed)用于设置串口速率,其中fd为打开设备文件,speed为速率,具体的函数代码如 下;void set_speed(int fd,int speed)int i;int statis;struct termios opt;for(i =O;ivsizeof(speed_arr)/sizeof(int);i+)if(speed = name_arti)teflush(fd,TCIOFLUSH);cfetispeed (&0 pt,speed_arri); cfsetospeed (&0 pt,speed_armi); status = tcsetarr(fd,TCSANOW,&0 pt); if(status != 0) perror(tesetarr fdl);return ;teflush(fd,TCIOFLUSH);网络通信模块及服务器的开发嵌入式移支打印终端和远程服务器之间采用C/S模式,PC作为服务器,客户端,两者之间通过 以太网连接。远程服务器数据据库采用SQL SEVER,开发工具使用Microsoft Visual C+6.0;l. 建立数据库 在远程服务器上要建立 3 个表。分别为 bookinfo 表, borrow 表和 userifno 表。具体内容在这里 就不写了。2服务器端通信程序设计 数据库建立之后,就可以开始进行服务器端程序的设计了。这里的网络连接部分采用 TCP 连接方 式,流程图如下图所示:系统应用程序设计编写任务调度,首先要清楚整个数据流程(1) 首先在程序开始处定义服务器端口和IP地址#define SERVICEPORT 3490#define SERV_HOST_ADDR“192.168.1.221”(2) 接着打开打印机设备文件Weida_fd = open(“/dev/weida_printer”,O_WRONLY);(3) 打开串口设备文件,并设定波特率,数据 位、停止位和校验位 ( 4)最后是进行客户端的程序编写,在这里就不写了。经过上面的几步,完成了打印的过程,最后是系统调试阶段了。五 系统调试把写好的程序和驱动用交叉编译工具编译好,然后加入文件系统,烧入开发板进行调度,步骤如下:(1)启动系统(2)按数据键进入 LINUX 操作系统(3)进入微型打印机驱动,加载驱动,并测试:Cd weida_printer/进入 weida_printer 即个子 放驱动的目录Insmod weida_printer.o /加载驱动Mknod.dev/.weida_printer c 234 0; 建立节点文件,其中 weida_printer 为设备名,C 为字符 ./test4) 测试扫描 Cd scan/进入扫描测试程序目录./test;/进行测试5)系统测试启动服务器系统测试#cd myprojoct /进入 myproject 文件夹整个客户端程序都 在这个文件夹下 ./typeterm.0至此,整个系统测试成功(当然是理论上的成功,只是测试方案)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!