版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2015嵌入式大作業(yè) 一、敘述JTAG接口在嵌入式開發(fā)中的作用。JTAG是一種國際標(biāo)準(zhǔn)測試協(xié)議主要用于芯片內(nèi)部測試,JTAG接口的主要作用如下所述:u 它最初用來對(duì)電路和芯片進(jìn)行邊界掃描測定,它的基本原理是在器件內(nèi)部定義一個(gè)測試是訪問口(Test Access Port),通過JTAG專用的測試工具對(duì)器件內(nèi)部節(jié)點(diǎn)進(jìn)行測試。通過電路的邊界掃描測試技術(shù),用具有邊界掃描功能的芯片構(gòu)成的印制板電路,可通過相應(yīng)的測試設(shè)備檢測芯片功能,檢測電路連接的正確性同時(shí)檢測它是否有預(yù)定的邏輯功能,從而對(duì)這塊印制電路進(jìn)行故障檢測和故障定位。u JTAG接口可以對(duì)目標(biāo)板進(jìn)行測試,還可以對(duì)目標(biāo)板系統(tǒng)的存儲(chǔ)單元編程,經(jīng)常通
2、過JTAG接口直接燒寫嵌入式系統(tǒng)Flash存儲(chǔ)器。u JTAG的引腳定義1. TCK為TAP提供一個(gè)獨(dú)立基本的時(shí)鐘信號(hào),TAP的所有操作都是通過這個(gè)時(shí)鐘信號(hào)來驅(qū)動(dòng)的。2. TMS用來控制TAP狀態(tài)機(jī)的轉(zhuǎn)換,通過TMS新號(hào)可以控制TAP在不同的狀態(tài)間轉(zhuǎn)換,TMS信號(hào)在TCK信號(hào)的上升沿有效。3. TDI是數(shù)據(jù)輸入的接口,所有輸入到特定寄存器的數(shù)據(jù)都要通過TDI一位一位串行輸出。4. TDO數(shù)據(jù)輸出的接口所有從特定寄存器輸出的數(shù)據(jù)都要通過TDO一位一位串行輸出。5. TRST可以用來對(duì)TAP Controller進(jìn)行復(fù)位,該信號(hào)線可選,TMS也可以對(duì)其進(jìn)行復(fù)位。6. VTREF接口信號(hào)電平參考電壓
3、一般直接接V(supply),這個(gè)可以用來確定ARM的JTAG的接口邏輯電平。7. RTCK可選項(xiàng),由目標(biāo)端反饋給仿真器的時(shí)鐘信號(hào),用來同步TCK信號(hào)的產(chǎn)生,不使用時(shí)直接接地。8. System Reset可選項(xiàng),與目標(biāo)板上的系統(tǒng)復(fù)位信號(hào)相連,可以直接對(duì)目標(biāo)系統(tǒng)復(fù)位,同時(shí)可以檢測目標(biāo)系統(tǒng)的復(fù)位情況,為了防止誤觸發(fā)應(yīng)在目標(biāo)端加上適當(dāng)?shù)纳衔浑娮琛?. USERIN用戶自定義輸入,可以接到一個(gè)口上,用來接收上位機(jī)的控制。10. USER OUT 用戶自定義輸出,可以接到一個(gè)口上,用來向上位機(jī)反饋一個(gè)狀態(tài)。二、敘述嵌入式平臺(tái)的搭建過程,以linux為例。1) 一:建立宿主機(jī)開發(fā)環(huán)境 建立交叉編譯的環(huán)境
4、即在宿主機(jī)上安裝與開發(fā)板相應(yīng)的編譯器及庫函數(shù),以便能夠在宿主機(jī)上應(yīng)用開發(fā)工具編譯在目標(biāo)板上運(yùn)行的Linux引導(dǎo)程序,內(nèi)核,文件系統(tǒng)和應(yīng)用程序交叉編譯:在特殊的環(huán)境下,把嵌入式程序代碼編譯成不同的CPU所對(duì)應(yīng)的機(jī)器代碼。開發(fā)時(shí)使用宿主機(jī)上的交叉編譯,匯編及鏈接工具形成可執(zhí)行的二進(jìn)制代碼(該代碼只能在開發(fā)板上執(zhí)行),然后下載到開發(fā)板上運(yùn)行2) 下載和安裝arm-Linux-gcc編譯工具鏈下載最新的arm-Linux-gcc并解壓至當(dāng)前目錄下在系統(tǒng)配置文件profile中設(shè)置環(huán)境變量 方法:直接在profile文件中加入搜索路徑 立即使新的環(huán)境變量生效:運(yùn)行source命令,檢查是否將路徑加入到p
5、ath,測試是否安裝成功,編譯程序,測試交叉工具鏈3) 配置超級(jí)終端minicom minicom是宿主機(jī)與目標(biāo)板進(jìn)行通信的終端:在宿主機(jī)Linux終端中輸入:minicom-s或輸入minicom然后按ctrl+A+O對(duì)超級(jí)終端minicom進(jìn)行配置,再選擇串口并配置串口,最后保存即可4) 建立數(shù)據(jù)共享服務(wù):NFS服務(wù)是Linux系統(tǒng)中經(jīng)常使用的數(shù)據(jù)文件共享服務(wù)5) 編譯嵌入式系統(tǒng)內(nèi)核:內(nèi)核配置,建立依存關(guān)系,建立內(nèi)核6) 制作文件系統(tǒng)三、給出現(xiàn)今有哪些用于嵌入式開發(fā)的芯片名稱,他們分是哪些公司的產(chǎn)品?體系結(jié)構(gòu)是什么?1) 基于32位RISC微處理器芯片的ARM7系列,ARM9系列,ARM9
6、E系列,ARM10E系列都是ARM公司的產(chǎn)品,arm9以上的體系結(jié)構(gòu)是哈佛總線體系結(jié)構(gòu)以下的是馮。諾依曼體系。2) TI公司的DSP處理器內(nèi)核是哈佛總線體系結(jié)構(gòu)。3) PowerPC公司的芯片,基于RISC結(jié)構(gòu),是哈佛總線體系結(jié)構(gòu)。 4) MIPS公司的芯片,基于RISC結(jié)構(gòu),是哈佛總線體系結(jié)構(gòu)。 四、現(xiàn)今較流行的嵌入式操作系統(tǒng)有哪些?1 VxWork2 Linux3 C/OS-4 windows CE5 Android五、PXA270嵌入式開發(fā)板的接口有哪些?全雙工異步串行口和硬件流控制串行口,10M標(biāo)準(zhǔn)以太網(wǎng)接口10M/100M標(biāo)準(zhǔn)以太網(wǎng)接口,USB接口,紅外通訊口,音頻接口,存儲(chǔ)卡口,視
7、頻和觸摸屏接口攝像頭接口,RTC時(shí)鐘接口,調(diào)試接口,下載接口,電源接口。六、請寫出Nor Flash和 Nand Flash的區(qū)別。Flash是一種非易失閃存,它具有和ROM一樣的掉電后數(shù)據(jù)不會(huì)丟失的特性。它主要分為Nor Flash和 Nand Flash。他們的主要區(qū)別如下所示: Nor Flash Nand Flash接口時(shí)序同SRAM,容易使用地址/數(shù)據(jù)線復(fù)用,數(shù)據(jù)位較窄讀取速度較快讀取速度較慢檫除速度慢,以64-128KB的塊為單位檫除速度快,以8-32KB的塊為單位寫入速度慢(因?yàn)橐话阋叱懭胨俣瓤祀S機(jī)存取速度較快,支持XIP(eXecute In Place,芯片內(nèi)執(zhí)行),適
8、用于代碼存儲(chǔ)。在嵌入式系統(tǒng)中,常用于存放引導(dǎo)程序、根文件等順序讀取速度較快,隨機(jī)存取速度慢,適用于數(shù)據(jù)存儲(chǔ)(如大容量的多媒體應(yīng)用)。在嵌入式系統(tǒng)中,常用于存放用戶文件系統(tǒng)等單片容量較小為1-32MB單片容量較大為8-128MB,提高了單元密度最大檫寫次數(shù)為10萬次最大檫寫次數(shù)為100萬次七、馮。諾依曼架構(gòu)與哈佛架構(gòu)的區(qū)別。他們的主要區(qū)別是計(jì)算機(jī)的存儲(chǔ)結(jié)構(gòu)和總線連接形式不同。在馮·諾依曼的結(jié)構(gòu)中,存儲(chǔ)器內(nèi)部的數(shù)據(jù)存儲(chǔ)空間和程序存儲(chǔ)空間是合在一起的,他們共享存儲(chǔ)器總線,即數(shù)據(jù)和指令在同一條總線上通過時(shí)分復(fù)用的方式進(jìn)行傳輸,這種結(jié)構(gòu)在高速運(yùn)行時(shí),不能達(dá)到同時(shí)取指令和取操作數(shù)的目的從而形成傳
9、輸過程的瓶頸。在哈佛總線體系結(jié)構(gòu)的芯片內(nèi)部,數(shù)據(jù)存儲(chǔ)空間和程序存儲(chǔ)空間是分開的,所以哈佛總線體系在指令執(zhí)行時(shí)可以同時(shí)存取指令(來自程序空間)和取操作數(shù)(來自數(shù)據(jù)空間),因此具有更高的執(zhí)行效率,修正的哈佛總線結(jié)構(gòu)還可以在程序空間和數(shù)據(jù)空間之間相互傳送數(shù)據(jù)。(目前大多數(shù)DSP和ARM9以上的嵌入式系統(tǒng)微處理器內(nèi)核都采用哈佛總線體系結(jié)構(gòu)而ARM7采用的則是馮·諾依曼結(jié)構(gòu)) 8、 單周期3級(jí)流水的情況下,第10個(gè)指令周期時(shí),第幾條指令執(zhí)行結(jié)束?三級(jí)流水讀取指令過程: 取指從存儲(chǔ)器裝載一條指令 譯碼識(shí)別將要被執(zhí)行的指令 執(zhí)行處理指令并將結(jié)果寫會(huì)寄存器故ARM正在執(zhí)行第1條指令的同時(shí)對(duì)第2條指令
10、進(jìn)行譯碼,并將第3條指令從存儲(chǔ)器中取出。所以,ARM7流水線只有在取第10條指令時(shí),第7條指令才算完成執(zhí)行。九、下面是linux下的一個(gè)簡單的設(shè)備驅(qū)動(dòng)程序,寫出linux設(shè)備驅(qū)動(dòng)常用的數(shù)據(jù)結(jié)構(gòu),同時(shí)閱讀下面代碼,請給出測試程序中的每條語句加以注釋。設(shè)備驅(qū)動(dòng)程序Keypad.c的源代碼:#include <linux/module.h>/最基本的文件,支持動(dòng)態(tài)添加和卸載模塊。Hello World驅(qū)動(dòng)要這一個(gè)文件就可以了#include <linux/fs.h> /包含了文件操作相關(guān)struct的定義,例如大名鼎鼎的struct file_operations#inclu
11、de <linux/init.h> /初始化頭文件#include <linux/poll.h>/輪詢文件#include <linux/types.h>/對(duì)一些特殊類型的定義,例如dev_t, off_t, pid_t.其實(shí)這些類型大部分都是unsigned int型通過一連串的typedef變過來的,只是為了方便閱讀。#include <linux/rtc.h>/可以在芯片上產(chǎn)生周期性的中斷#include <linux/delay.h>/延時(shí)頭文件#include <asm/hardware.h>/與處理器相關(guān)的硬件
12、#include <asm/delay.h>/延時(shí)頭文件#include <asm/uaccess.h>/與處理器相關(guān)的入口#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 為向外部L
13、ED進(jìn)行數(shù)值設(shè)定,它定義在其它頭文件里*/void led_off_on() int i;EXT_LED_CS = 0xff;for(i =0 ; i<8;+i)EXT_LED_CS = (1 << i) & 0xff);/*點(diǎn)亮相應(yīng)LED燈*/udelay(30000);/調(diào)用udelay函數(shù)來延遲EXT_LED_CS = 0xff;/*應(yīng)用程序用open來打開設(shè)備文件,實(shí)際上調(diào)用驅(qū)動(dòng)的lednkey_open()函數(shù)*/ int lednkey_open(struct inode *inode, struct file *filp)/打開設(shè)備文件MOD_INC_U
14、SE_COUNT;/模塊自身通過 MOD_INC_USE_COUNT,宏來管理自己被使用的計(jì)數(shù)。return (0); /* success */ int lednkey_release(struct inode *inode, struct file *filp) /釋放設(shè)備文件led_off_on();MOD_DEC_USE_COUNT;return (0);ssize_t lednkey_read(struct file *filp, char *Putbuf, size_t length, loff_t *f_pos)/按鍵讀取函數(shù)unsigned short BottonStatus
15、; unsigned char Bottontmp = 0;int i;BottonStatus = ( EXT_KEY_CS & 0xff ); /*按鍵狀態(tài)*/for(i = 0 ; i < 8; +i)if( (BottonStatus >> i) & 1) = 0 ) Bottontmp = (i+1);/*判斷哪個(gè)按鍵按下*/copy_to_user( Putbuf, &Bottontmp, length);/*將數(shù)據(jù)從內(nèi)核態(tài)拷貝到用戶態(tài),這是由定義在<asm/uaccess.h>里的特殊函數(shù)實(shí)現(xiàn)在不同的空間傳輸任意字節(jié)的數(shù)據(jù)*/
16、return length;ssize_t lednkey_write(struct file *filp, const char *Getbuf, size_t length, loff_t *f_pos)int num;unsigned char UsrWantLed; copy_from_user( &UsrWantLed, Getbuf, length);/*將數(shù)據(jù)從用戶態(tài)拷貝到核心態(tài)*/num = ( (UsrWantLed) & 0xff );/*確定哪一位要進(jìn)行設(shè)定*/EXT_LED_CS = (1 << (num-1);/點(diǎn)亮相應(yīng)LED燈return
17、 (0);int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg)/lednkey_ioctl 接口函數(shù),主要用于獲取或者改變正在運(yùn)行的設(shè)備參數(shù)switch(cmd)case LED_SHOW: if(arg)led_off_on(); break;return 0;/*以下這些驅(qū)動(dòng)函數(shù)是與用戶的應(yīng)用程序里對(duì)設(shè)備文件操作的函數(shù)相對(duì)應(yīng)的*/struct file_operations lednkey_fops = open: lednkey_open,read: le
18、dnkey_read,write: lednkey_write,ioctl: lednkey_ioctl,release: lednkey_release,;static int _init xhyper250_keypad_init(void) /初始化設(shè)備函數(shù),在函數(shù)名之前加上這個(gè)屬性之后,系統(tǒng)會(huì)在初始化完成之后丟棄初始化函數(shù),收回它所占用的內(nèi)存,以減小內(nèi)核所占用的內(nèi)存空間,它只對(duì)內(nèi)建的驅(qū)動(dòng)起作用int result;result = register_chrdev(LEDnKEY_MAJOR, "lednkey", &lednkey_fops);/向操作系統(tǒng)注
19、冊一個(gè)主號(hào)為251,設(shè)備名為"lednkey",并傳遞設(shè)備驅(qū)動(dòng)程序的指針為lednkey_fops(全局變量) ,其中register_chrdev ( )是內(nèi)核提供的函數(shù),作用是完成注冊新的字符設(shè)備printf("%s %s initialized.n",KEYPAD_NAME, KEYPAD_VERSION);led_off_on();return 0;static void _exit xhyper250_keypad_exit(void)/*向操作系統(tǒng)卸載設(shè)備函數(shù)*/ unregister_chrdev( LEDnKEY_MAJOR, "
20、;lednkey" ); led_off_on();module_init(xhyper250_keypad_init); /顯式聲明初始化設(shè)備函數(shù)module_exit(xhyper250_keypad_exit); /顯式聲明卸載設(shè)備函數(shù)*/ 測試文件的源代碼如下:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#define LED_S
21、HOW 10/宏定義int fd;static char *dev_name = "/dev/keypad"int main(int argc, char *argv)int data = 0, pre_data;fd = open( dev_name , O_RDWR );/使用函數(shù)open打開設(shè)備keypad if( !(fd >=0) )printf("%s file open failedn", dev_name );exit(-1);/打開失敗,顯示出錯(cuò)信息printf("nkeypad App : press the push
22、 button see show led - Exit Ctrl-C n",dev_name);/打開成功,提示用戶輸入 ioctl(fd,LED_SHOW,1);/循環(huán)顯示LED,看LED是否正常while(1)dopre_data = data;read( fd, (char * )&data, sizeof(data) );data = (data & 0xff);while(data = 0);if( pre_data = 0)printf("Write %d LEDn",data);write( fd, (const char *)&am
23、p;data, sizeof(const char )data) ); /采用忙等待方式掃描用戶輸入,傳遞給write函數(shù) close( fd );/使用函數(shù)close關(guān)閉設(shè)備keypadreturn 0;常用數(shù)據(jù)結(jié)構(gòu):(1)file_operations 結(jié)構(gòu):struct file_operations struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char _user *, size_t, loff_t *); ssize_t (*w
24、rite) (struct file *, const char _user *, size_t, loff_t *); ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll)
25、(struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_s
26、truct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *, fl_owner_t id); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*aio_fsync) (struct kiocb *, int datasync); int (*fasync) (int, struct file *, int); i
27、nt (*lock) (struct file *, int, struct file_lock *); ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生課外實(shí)踐服務(wù)制度
- 電力施工現(xiàn)場消防安全管理制度
- 四川省眉山市(2024年-2025年小學(xué)五年級(jí)語文)統(tǒng)編版專題練習(xí)(上學(xué)期)試卷及答案
- 2024至2030年暖氣智能溫控器項(xiàng)目投資價(jià)值分析報(bào)告
- 2024年二層蛋形貼花提籃項(xiàng)目可行性研究報(bào)告
- 特種設(shè)備事故應(yīng)急處理制度
- 電商平臺(tái)財(cái)務(wù)制度與風(fēng)險(xiǎn)控制
- 急診科環(huán)境衛(wèi)生管理制度
- 三年級(jí)英語上冊 【分層訓(xùn)練】英語課時(shí)練習(xí)-Unit1HelloPartB自主測試(含答案)(人教PEP)
- 職業(yè)健康體檢的知情同意制度
- 2025屆新高考地理精準(zhǔn)復(fù)習(xí) 基于素養(yǎng)導(dǎo)向下的高考二輪復(fù)習(xí)地理備考策略
- MOOC 數(shù)學(xué)物理方程-南京信息工程大學(xué) 中國大學(xué)慕課答案
- 重點(diǎn)關(guān)愛學(xué)生幫扶活動(dòng)記錄表
- 分層抽樣設(shè)計(jì)案例分析
- 2023年-2024年食品安全快速檢測考試題庫及答案
- 幼兒園大班健康繪本《牙齒旅行記》課件
- GB/T 31384-2024旅游景區(qū)公共信息導(dǎo)向系統(tǒng)設(shè)置規(guī)范
- 2024年榆林能源集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 母語為英語的漢語學(xué)習(xí)者習(xí)得漢語語音的偏誤分析及教學(xué)對(duì)策
- 一病一品糖尿病
- 2024海上風(fēng)電無人機(jī)巡檢技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論