嵌入式大作业
2015嵌入式大作业
一、叙述JTAG接口在嵌入式开发中的作用。 JTAG是一种国际标准测试协议主要用于芯片内部测试,JTAG接口的主 要作用如下所述: 它最初用来对电路和芯片进行边界扫描测定,它的基本原理是 在器件内部定义一个测试是访问口(Test Access Port), 通过JTAG专用的测试工具对器件内部节点进行测试。通过电路 的边界扫描测试技术,用具有边界扫描功能的芯片构成的印制 板电路,可通过相应的测试设备检测芯片功能,检测电路连接 的正确性同时检测它是否有预定的逻辑功能,从而对这块印制 电路进行故障检测和故障定位。 JTAG接口可以对目标板进行测试,还可以对目标板系统ash存储 器。 JTAG的引脚定义 1. TCK为TAP提供一个独立基本的时钟信号,TAP的所有操作都是 通过这个时钟信号来驱动的。 2. TMS用来控制TAP状态机的转换,通过TMS新号可以控制TAP在不 同的状态间转换,TMS信号在TCK信号的上升沿有效。 3. TDI是数据输入的接口,所有输入到特定寄存器的数据都要通 过TDI一位一位串行输出。 4. TDO数据输出的接口所有从特定寄存器输出的数据都要通过TDO
6) 制作文件系统 三、给出现今有哪些用于嵌入式开发的芯片名称,他们分是哪些公司的产 品?体系结构是什么? 1) 基于32位RISC微处理器芯片的ARM7系列,ARM9系列,ARM9E系 列,ARM10E系列都是ARM公司的产品,arm9以上的体系结构是哈 佛总线体系结构以下的是冯。诺依曼体系。 2) TI公司的DSP处理器内核是哈佛总线体系结构。 3) PowerPC公司的芯片,基于RISC结构,是哈佛总线体系结构。 4) MIPS公司的芯片,基于RISC结构,是哈佛总线体系结构。 四、现今较流行的嵌入式操作系统有哪些? 1 VxWork 2 Linux 3 μC/OS-Ⅱ 4 windows CE 5 Android 五、PXA270嵌入式开发板的接口有哪些? 全双工异步串行口和硬件流控制串行口,10M标准以太网接口 10M/100M标准以太网接口,USB接口,红外通讯口,音频接口,存储 卡口,视频和触摸屏接口摄像头接口,RTC时钟接口,调试接口,下载 接口,电源接口。 六、请写出Nor Flash和 Nand Flash的区别。 Flash是一种非易失闪存,它具有和ROM一样的掉电后数据不会丢失的 特性。它主要分为Nor Flash和 Nand Flash。他们的主要区别如下所 示: Nor Flash Nand Flash 接口时序同SRAM,容易使用 读取速度较快 檫除速度慢,以64-128KB的块为单 写入速度慢(因为一般要檫除) 地址/数据线复用,数据位较窄 读取速度较慢 檫除速度快,以8-32KB的块为 单位 写入速度快
一位一位串行输出。 5. TRST可以用来对TAP Controller进行复位,该信号线可选, TMS也可以对其进行复位。 6. VTREF接口信号电平参考电压一般直接接V(supply),这个可以 用来确定ARM的JTAG的接口逻辑电平。 7. RTCK可选项,由目标端反馈给仿真器的时钟信号,用来同步 TCK信号的产生,不使用时直接接地。 8. System Reset可选项,与目标板上的系统复位信号相连,可 以直接对目标系统复位,同时可以检测目标系统的复位情况, 为了防止误触发应在目标端加上适当的上位电阻。 9. USER IN用户自定义输入,可以接到一个IO口上,用来接收 上位机的控制。 10. USER OUT 用户自定义输出,可以接到一个IO口上,用来 向上位机反馈一个状态。 二、叙述嵌入式平台的搭建过程,以linux为例。 1) 一:建立宿主机开发环境 建立交叉编译的环境即在宿主机上安装与开发板相应的编译器 及库函数,以便能够在宿主机上应用开发工具编译在目标板上运行的 Linux引导程序,内核,文件系统和应用程序 交叉编译:在特殊的环境下,把嵌入式程序代码编译成不同的CPU所对 应的机器代码。 开发时使用宿主机上的交叉编译,汇编及链接工具形成可执行的二进 制代码(该代码只能在开发板上执行),然后下载到开发板上运行 2) 下载和安装arm-Linux-gcc编译工具链 下载最新的arm-Linux-gcc并解压至当前目录下 在系统配置文件profile中设置环境变量 方法:直接在profile文件 中加入搜索路径 立即使新的环境变量生效:运行source命令,检查 是否将路径加入到path,测试是否安装成功, 编译程序,测试交叉工具链 3) 配置超级终端minicom minicom是宿主机与目标板进行通信的终 端:在宿主机Linux终端中输入:minicom-s或输入minicom然后 按ctrl+A+O对超级终端minicom进行配置,再选择串口并配置串 口,最后保存即可 4) 建立数据共享服务:NFS服务是Linux系统中经常使用的数据文 件共享服务 5) 编译嵌入式系统内核:内核配置,建立依存关系,建立内核
#include <linux/poll.h>//轮询文件 #include <linux/types.h>//对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串 的typedef变过来的,只是为了方便阅读。 #include <linux/rtc.h>//可以在芯片上产生周期性的中断 #include <linux/delay.h>//延时头文件 #include <asm/hardware.h>//与处理器相关的硬件 #include <asm/delay.h>//延时头文件 #include <asm/uaccess.h>//与处理器相关的入口 #define LEDnKEY_MAJOR 251 #define KEYPAD_NAME "X-Hyper250 Keypad" #define KEYPAD_VERSION "Version 0.1" #define EXT_KEY_CS EXT_PORT2 //宏定义 #define EXT_LED_CS EXT_PORT3//宏定义 #define LED_SHOW 10//宏定义 /*EXT_KEY_CS 为向外部LED进行数值设定,它定义在其它头文件里*/ void led_off_on() { int i; EXT_LED_CS = 0xff; for(i =0 ; i<8;++i) { EXT_LED_CS = ~((1 << i) & 0xff);/*点亮相应LED 灯*/ udelay(30000);//调用udelay函数来延迟 } EXT_LED_CS = 0xff; } /*应用程序用open来打开设备文件,实际上调用驱动的 lednkey_open()函数*/ int lednkey_open(struct inode *inode, struct file *filp)//打 开设备文件 { MOD_INC_USE_COUNT;//模块自身通过 MOD_INC_USE_COUNT,宏来管 理自己被使用的计数。
EXT_LED_CS = ~(1 << (num-1));//点亮相应LED灯 return (0); } int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg)//lednkey_ioctl 接口函 数,主要用于获取或者改变正在运行的设备参数 { switch(cmd) { case LED_SHOW: { if(arg) led_off_on(); break; } } return 0; } /*以下这些驱动函数是与用户的应用程序里对设备文件操作的函数相 对应的*/ struct file_operations lednkey_fops = { open: lednkey_open, read: lednkey_read, write: lednkey_write, ioctl: lednkey_ioctl, release: lednkey_release, }; static int _init xhyper250_keypad_init(void) //初始化设备函 数,在函数名之前加上这个属性之后,系统会在初始化完成之后丢弃 初始化函数,收回它所占用的内存,以减小内核所占用的内存空间, 它只对内建的驱动起作用 { int result; result = register_chrdev(LEDnKEY_MAJOR, "lednkey", &lednkey_fops);//向操作系统注册一个主号为251,设备名
随机存取速度较快,支持 顺序读取速度较快,随机存取速 XIP(eXecute In Place,芯片内执 度慢,适用于数据存储(如大容 行),适用于代码存储。在嵌入式 量的多媒体应用)。在嵌入式系
系统中,常用于存放引导程序、根 文件等 单片容量较小为1-32MB
统中,常用于存放用户文件系统 等 单片容量较大为8-128MB,提高 了单元密度
最大檫写次数为10万次 最大檫写次数为100万次 七、冯。诺依曼架构与哈佛架构的区别。 他们的主要区别是计算机的存储结构和总线连接形式不同。 在冯·诺依曼的结构中,存储器内部的数据存储空间和程序存储空间 是合在一起的,他们共享存储器总线,即数据和指令在同一条总线上 通过时分复用的方式进行传输,这种结构在高速运行时,不能达到同 时取指令和取操作数的目的从而形成传输过程的瓶颈。 在哈佛总线体系结构的芯片内部,数据存储空间和程序存储空间是分 开的,所以哈佛总线体系在指令执行时可以同时存取指令(来自程序 空间)和取操作数(来自数据空间),因此具有更高的执行效率,修 正的哈佛总线结构还可以在程序空间和数据空间之间相互传送数据。 (目前大多数DSP和ARM9以上的嵌入式系统微处理器内核都采用哈佛总 线体系结构而ARM7采用的则是冯·诺依曼结构) 8、 单周期3级流水的情况下,第10个指令周期时,第几条指令执行结 束? 三级流水读取指令过程: ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 故ARM正在执行第1条指令的同时对第2条指令进行译码,并将第3条指 令从存储器中取出。所以,ARM7流水线只有在取第10条指令时,第7条 指令才算完成执行。 九、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动 常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句 加以注释。 设备驱动程序Keypad.c的源代码: #include <linux/module.h>//最基本的文件,支持动态添加和卸载 模块。Hello World驱动要这一个文件就可以了 #include <linux/fs.h> //包含了文件操作相关struct的定义,例如 大名鼎鼎的struct file_operations #include <linux/init.h> //初始化头文件