版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Arm+Linux开发平台软件需求规格书 文档编号:Arm+Linux开发平台软件需求规格书单 位: 编制人:日期:校 对:日期:审 核:日期:批 准:日期:修改记录日期版本描述修改人目录1.引言41.1.编写目的41.2.名词解析41.3.参考资料42.运行环境42.1.硬件环境42.2.软件环境43.功能需求43.1.功能划分53.2.功能描述53.2.1.53.2.2.54.接口需求54.1.接口划分54.2.接口描述54.2.1.54.2.2.55.性能需求55.1.稳定性55.2.实时性55.3.可扩展性55.4.可维护性56.运行需求56.1.开机界面66.2.即插即用67.其他需
2、求61. 引言1.1. 编写目的为了能够使arm+linux平台外协合作方了解我们公司软件需求规格,按照计划完成该arm+linux平台的外协开发,为了能够协调好外协工作的顺利进行和需求规格的交流,特制定并编写本平台软件需求规格书。1.2. 名词解析名词解析1.3. 参考资料arm+linux平台研制要求2011年4月12日2. 运行环境2.1. 硬件环境CPU:S3C2440,主频400MHzRam:64MByteNandFlash:256MByte2.2. 软件环境Bootloader:UbootLinux内核:Linux-2.6.32.2NandFlash文件系统:Yaffs2Rootf
3、s文件系统:3. 功能需求3.1. 功能划分该软件功能可以细分为以下4部分:A/D数据采集处理和D/A模拟量输出,外围接口通信,数据存储,界面显示和操作,3.2. 功能描述3.2.1. A/D数据采集处理和D/A模拟量输出S3C2440与FPGA高速采集卡之间的接口为:CPCI接口。FPGA高速采集卡的功能是把输入的-5V+5V模拟电平信号以200KSPS1MSPS的采样速率输入到A/D转换电路中。A/D转换电路通过量化和编码把模拟信号转换成数字信号,然后S3C2440处理器把数字信号传送给上层应用程序。所以首先要编写合理的符合业务需要的A/D驱动程序。A/D驱动程序的主要功能是:打开和关闭A
4、/D转换器以及对A/D转换器的转换结果进行读取操作。打开、关闭、读取A/D转换器对应的底层操作函数依次为:static int adc_enable(int ch);static int adc_disbale();static int adc_read(int ch);A/D驱动程序通过I/O控制函数顺序调用adc_enable()、adc_read()、adc_disable()这3个函数实现对模拟信号的采集、转换和输出。I/O控制函数的声明如下:ssize_t adc_ioctl( struct inode* inode, struct file* file, unsigned int
5、cmd, unsigned ling arg)接着完善A/D驱动程序的文件操作结构,其文件操作结构如下:static struct file_operations adc_opsread:adc_read,write:adc_write,ioctl:adc_ioctl,open:adc_open,release:adc_release,然后编写A/D转换器驱动程序的初始化函数,其函数声明如下:static int _init HW_AD_init(void);函数内部调用了内核函数devfs_register_chardev()来注册A/D转换设备和devfs_register()来获得A/D
6、转换设备的操作句柄。然后编写A/D驱动程序的模块加载和卸载函数。Static int _init AD_init(void);/内部调用初始化函数来完成模块加载Static void _exit cleanup_AD(void);/内部调用devfs_unregister_chrdev()和devfs_unregister()来完成模块卸载。上层用户应用程序在接收到A/D转换结果后,要进行以下操作:1.2.3.3.2.2. 外围接口通信该平台的外围接口包括:串口、网口、USB口、按键接口、LVDS触摸屏显示接口、GPIO口、CPCI接口、CAN口和I2C口。目前,linux内核选用的是linu
7、x-2.6.32,而这个版本的内核所有的驱动程序都支持热插拔。所以要求该平台所有的外围接口设备都应该支持热插拔,以方便用户的使用。一个外围设备的hotplug调用过程如下:(1) 用户插入或者安装上外围设备(2) 总线报告新设备插入和读取PID信息(3) 自动加载对应的驱动程序(4) 调用/sbin/hotplug脚本,传递环境变量(5) 调用外围设备代理脚本/etc/hotplug/*.agent(6) 代理脚本/etc/hotplug/*.agent加载模块对应的驱动程序下面依次介绍各个外围接口的需求。l 串口串口类型包括3种:2路RS232接口,1路RS422或者RS485接口,所属种类
8、为:异步传输串行接口(UART)。这3种串口的波特率可设,设置范围为:2400bps115200bps。其中1路RS232用于调试和下载,另一路和1路RS422或者RS485用于串口通信。RS485采用差分线传输数字信号时,两线间的电压差为+2V+6V时,认为是“1”,-2V-6V时,认为是“0”。RS485的实际传输距离为3000米,而RS232通常不能超过50米。异步串口的传输原理如下:其传输的数据都是以帧方式传输的,常用的帧结构为:1位起始位,8位数据位,无奇偶校验位,1位停止位。在传输开始前,传输线处于空闲状态,连续送出“1”。当发送“0”时,表示传输开始,之后出现在总线上的都是二进制
9、编码的数据,传输完成后,利用1个停止位(逻辑1),使传输线回到空闲状态,然后发送方才可以发送下一帧数据。在linux中,串口常被看做成中断设备(tty),终端设备的驱动程序分为3层,tty_core,tty_line_discipline,tty_driver。编写串口驱动程序的步骤如下:1. 定义各种宏,把实际的物理地址转化成虚拟地址。2. 实现串口的操作函数结构体(struct uart_ops;)中的各种函数。比如包括:阻止发送函数、发送使能函数、阻止接收函数、发送缓冲判空函数、获取控制信息函数、发送中断信号函数、接收中断函数、发送中断函数、出错中断函数、初始化函数、关闭串口函数、波特率
10、改变函数、返回端口类型函数、设置端口类型函数等。3. 注册串口驱动程序,一个端口对应的数据结构就是uart_port,其中有串口所有的物理特性,所以,驱动程序向系统注册一个端口的过程就是注册uart_port数据结构的过程。l 网口网口类型为:以太网接口,传输速率为10M/100M,工作模式为点对点连接的全双工传输模式。共两路,一路用于调试和下载,另一路用于网络通信。以太网不是一种具体的网络,而只是一种技术规范,它采用的技术是:CSMA/CD,即载波监听多路访问及冲突检测技术。两包数据发送间隔最小为9.6ms(以10Mbit/s运行)。以太网的帧结构包括4种不同的格式,不过都具有8字节的前导字
11、符,前导字符的作用是使接收节点进行同步并做好接收数据帧的准备,其中前7个字节称为前同步码,内容为0xAA,最后一个字节称为帧起始标志服,内容为0xAB。以太网接口控制器包括MAC媒体访问层和PHY物理层芯片两部分,MAC集成在嵌入式CPU芯片中,而PHY就是网络芯片,比如RTL8201BL。而如果嵌入式CPU芯片中没有集成,我们可以通过使用Host Bus接口的以太网芯片来扩展网络接口,这样的芯片有:RTL8019。网络驱动程序的结构如下:在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层。网络设备初始化的工作流程:首先通过检测物理设备的硬件特征来判断网络物理设备是否存在,如果存在,再对
12、设备进行资源配置。当检测设备和资源配置的工作完成之后,就构造设备的device数据结构,用检测到的数值来对device中的变量初始化,最后向linux内核注册该设备并申请内存空间,这个注册函数函数定义为:int register_netdevice( struct net_device *dev ),其中,dev是指向网络设备的指针。所谓向内核注册的过程就是把dev所指向的设备的指针添加到linux系统中网络设备链表(dev_base)的最后,在设备注册成功后,程序调用device结构体中的init()函数,初始化该网络设备。数据包发送的工作流程:在设备初始化成功后,通过device结构体中的
13、open()函数指针调用网络设备的打开函数打开设备,接着通过device结构体中的建立硬件包头函数指针hard_header来建立硬件帧头信息,最后通过协议接口层函数dev_queue_xmit()来调用device结构体中的hard_start_xmit()函数指针,完成数据包的发送。函数hard_start_xmit()将把存放在套接字缓冲区中的数据发送到物理设备上。数据包接收的工作流程:当网络物理设备上有数据到达时,就触发硬件中断,产生中断信号,网络设备驱功能层就能够在中断向量表中根据中断号调用相应的中断处理程序,即数据包接收程序来处理数据包的接收。然后,网络协议接口层调用netif_r
14、x函数,把接收到的数据包传输到网络协议的上层进行处理。比如NE2000网卡的数据接收过程为:先由ne_probe()函数完成网络接口的初始化,利用在这个函数中的ne_probe1()函数或者ne_probe_isapnp()函数得到中断号,根据中断号进入中断服务处理函数ei_interrupt(),通过ei_interrupt()函数从8390的接收缓冲区中获得数据,并组合成sk_buff结构,再通过netif_rx()函数将接收到的数据存放在系统的接收队列之中。嵌入式linux网络各层之间的数据传输都是通过sk_buff。每个sk_buff包括一些控制方法和一块数据缓冲区,多个sk_buff
15、组成双向链表。l USB口USB接口类型为:USB1.1,传输速率为1.5Mbit/s12Mbit/s。2路USB主机,用于USB接口通信,1路USB从机,用于调试。这两路host usb,一路用于连接usb鼠标,一路用于连接u盘。所以一路要编写usb鼠标驱动程序,遵循HID协议标准,一路要编写u盘驱动程序,遵循usb mass storage协议规范。Usb驱动程序共分为3种:主机端设备驱动程序、主机控制器驱动程序和设备端驱动程序。主机端设备驱动程序:嵌入式内核已经为这部分驱动程序提供了很好的编程接口,驱动开发工程师只需要按照要求建立程序框架,通过调用操作系统提供的API函数就可以完成对US
16、B外设的特定访问。主机控制器驱动程序:如果想让设备具有USB host功能,那么在设备中就需要选用一个带有主机控制器的USB接口芯片。比如:philips公司的ISP1161、ISP1362。并且由驱动开发工程师自行编写实现该控制器的驱动程序。usb主机设备驱动程序的框架如下:1. 向内核注册该驱动程序。注册操作在驱动程序的初始化函数static int _init usb_skel_init(void)里。主要调用的是usb_register()函数。即usb_register(&skel_driver)2. 设备的相关信息和操作的结构体struct usb_driver3. 与应用
17、程序相对应的文件操作函数结构体struct file_operations4. 内核通过设备标识确定该设备的驱动程序,调用probe函数,同时usb_driver结构指针、接口号和接口ID被传送到函数中。Probe函数负责分配内存、创建设备请求等5. 注册devfs。通过调用devfs_register()函数来完成注册。6. 从内核中注销usb子系统。注销操作在驱动程序的退出函数static void _exit usb_skel_exit(void)里。主要调用的是usb_deregister(&skel_driver)usb设备端驱动程序的框架如下:1. 初始化模块:初始化模块描
18、述符、端点、配置RAM等2. 数据传输模块:传输数据,完成控制传输、中断传输、同步传输和批量传输等传输模块下的数据收发。3. 设备请求模块:处理设备请求。4. 厂商请求模块:处理生产厂商请求。5. 其他操作:处理主机端口复位、配置等。用户态程序对USB设备的open()、read()、write()、ioctl()、close()等操作是通过USB驱动程序中的文件操作结构体file_operations中的相对应的函数实现的。l 按键接口要求按键个数在20个以上,其中包括0(空格),1,2(a,b,c),3(d,e,f),4(g,h,i),5(j,k,l),6(m,n,o),7(p,q,r,s
19、),8(t,u,v),9(w,x,y,z)十个数字键用作数字、字母和拼音输入,“*”键用作符号,“#”键用作输入法,其他8个以上的按键功能暂无确定。嵌入式系统中按键的作用是:完成向CPU输入数据、传送命令等工作。按键开关通常为机械弹性开关,具有两种状态:闭合和断开。所以相对应的按键也具有两种状态:按键被按下和按键被抬起,一般是低电平表示按键被按下,高电平表示按键被抬起。按键的物理连接方式有两种:线性按键和矩阵按键。由于线性按键要求一个按键对应一个CPU的I/O口,而我们的按键个数又在20个以上,所以在该平台上不采用线性按键的连接方式。矩阵键盘连接方式占用N+M个I/O口,却可以驱动N*M个按键
20、,所以在该平台上采用的按键连接方式为矩阵键盘连接。利用软件程序来扫描和确认矩阵按键位置。硬件按键电路要具有按键防抖电路,其核心思想是:在嵌入式CPU的几个时钟周期内,通过对按键信号进行多次访问,查看电平状态是否保持一致。当多个按键同时按下时,为了避免丢失按键请求,可以采用一个环形队列当做缓冲区来存储键盘扫描码,这个环形队列的大小一般为10个按键代码。按键驱动程序包括以下模块:(1) 键盘的初始化模块,实现设备的注册、中断的注册、驱动程序模块的加载和卸载等;(2) 键盘的文件操作模块,包括:键盘的I/O控制模块,实现对键盘设备文件读/写之外的其他操作;键盘的open()函数,用来打开设备文件;读
21、取按键位置模块;键盘的中断处理模块。l 液晶屏接口液晶屏的大小为7寸屏,分辨率为800*480,接口类型为LVDS,并且为触摸屏(触摸屏就是在非触摸屏表面覆盖一层薄片,通过点击按键和图表来接收信息,并作出一些人为设计的响应动作)。触摸屏的类型有四种,在该平台上,采用的是电阻式触摸屏,因为表面声波式要经常擦拭,对环境清洁度要求较高;电容感应式不适用于金属机柜,对外界的电磁环境要求较高,漂移现象较严重;红外线式对外界的光照环境要求较高。而且在嵌入式系统中,很多LCD模块都采用电阻式触摸屏。l GPIO口用作数字量的输入和输出。电平类型为:TTL/LVTTL,05V,工作模式为:可独立设置输入和输出
22、,共4路,每路包括I/O口,工作频率小于1MHz。l CPCI口用于外接FPGA高速采集卡。l CAN口共1路,传输速率为5kbps1Mbps。用作信令的传输。l I2C口I2C接口有三种功能:连接温度传感器(temperature sensor)、连接实时时钟(RTC)和连接E2PROM。在此用作连接E2PROM。3.2.3. 数据存储NandFlash的大小共256MB(地址范围:0x00x0fff ffff),其中前32MB(地址范围:0x00x01ff ffff)的空间用于放置linux内核镜像和其他配置文件。NandFlash储存空间的规划如下:3.2.4. 界面显示和操作4. 接口
23、需求4.1. 接口划分该平台的接口包括:串口(uart口)、网口、USB口、键盘接口、4.2. 接口描述4.2.1. 串口串口编程需要用到的头文件有:#include <stdio.h> ,#include <unistd.h>,#include <termios.h>,#include <fcntl.h>.串口的终端函数有:打开串口。如:int fd = open( “/dev/ttyS0”, O_RDWR);设置串口。包括波特率设置,检验位设置,停止位设置和模式设置(如果串口只是用来传输数据,那么使用原始模式Raw Mode来进行通信)。写串
24、口。如:int nByte = write( int fd, char buffer1024, int length);读串口。如:int nByre = read( int fd, char buff1024, int length);不过最常用的还是以下的操作方式:Fd_setrfds;structtimevaltv;intretval;FD_ZERO(&rdfs);FD_SET( portsportNo.handle, &rfds);tv.tv_sec = Timeout / 1000;tv.tv_usec = Timeout % 1000 * 1000;retval =
25、 select(portsportNo.handle +, &rfds, NULL, NULL, &tv);if( retval = -1 )printf(“select error!n”);break;else if(retval)int actualRead = read( portsportNo.handle, char buff1024, int maxCnt);关闭串口。如:close( fd );串口的主函数如下:#define DEVICE_TTYS “/dev/ttyS0”int main (int argc, char argv)int fd;printf(“
26、n RS232 main start! nn”);fd = open( DEVICE_TTYS, O_RDWR);if( fd = -1)printf(“ open device %s failed”, DEVICE_TTYS);elseinit_ttyS(fd);rs232_transfer(fd);close(fd);return 0;其中,init_ttyS(fd)是端口初始化函数,主要完成的功能有:清除原有设置,设置波特率,设置标志位。rs232_transfer(fd)是通信功能函数,主要完成的功能有:清空接收buffer,while(1)循环先把发送buffer中的data发送到串
27、口fd,接着从串口fd中读取data到接收buffer中。4.2.2. 网口对网络设备进行操作,必须提供一组函数接口以供系统访问。1. 打开操作open()该函数在网络设备状态由down->up时被调用。当网络设备驱动程序以module方式被装入时,在open()函数里要调用MOD_INC_USE_COUNT宏。2. 关闭操作close()该函数在网络设备状态由up->down时被调用。当网络设备驱动程序以module方式被装入时,在close()函数里要调用MOD_DEC_USE_COUNT宏。3. 发送操作hard_start_xmit()所有的网络设备驱动程序都必须有这个发送方法,在系统调用驱动程序的xmit时,发送的数据放在一个叫sk_buff的结构体中。如果发送成功,hard_start_xmit方法里释放sk_buff,返回0,否则,返回1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第17课《散文二篇-我为什么而活着》自主学习单 2025-2026学年统编版语文八年级上册(学案)
- 2025《阿房宫赋》辞藻华丽课件
- 2025《答司马谏议书》变法的必要性课件
- 中、低压容器安全管理规定培训
- 35KV变电站运行副值值班员岗位安全职责培训
- 20201113初三数学(人教版)24.1.2垂直于弦的直径(2)-4练习题
- 2026年广东省云浮市单招职业适应性考试题库及答案详解(全优)
- 2026年广东茂名幼儿师范专科学校单招职业倾向性测试题库及答案详解(全优)
- 2026年广东省珠海市单招职业适应性考试题库含答案详解(突破训练)
- 2026年广州铁路职业技术学院单招综合素质考试题库附答案详解(典型题)
- 瞳孔检查课件
- 疫苗冷链管理培训课件
- 游泳救生培训课件
- DB11∕T 2447-2025 村庄雨水排除与内涝防治技术规范
- 2026年浙江经贸职业技术学院单招职业适应性考试题库及参考答案详解1套
- 2026年初级银行从业资格之初级银行业法律法规与综合能力考试题库500道附答案(夺分金卷)
- 某市生态环保局大气监测站点运维方案
- 家纺用品采购合同范本
- 电力电缆故障检测技术
- 2026年辽宁医药职业学院单招职业技能测试题库及答案1套
- 雨课堂在线学堂《文物精ping与文化中国》课后作业单元考核答案
评论
0/150
提交评论