嵌入式計算機系統(tǒng)課程設(shè)計報告_第1頁
嵌入式計算機系統(tǒng)課程設(shè)計報告_第2頁
嵌入式計算機系統(tǒng)課程設(shè)計報告_第3頁
嵌入式計算機系統(tǒng)課程設(shè)計報告_第4頁
嵌入式計算機系統(tǒng)課程設(shè)計報告_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、上海電力學院課程設(shè)計報告設(shè)計題目:基于ARM和Linux的I2C總線讀寫程序設(shè)計與實現(xiàn)專業(yè): 自動化工程學院 班級: 000000姓名: 11111111學號: 111111111. 課題研究意義、國內(nèi)外研究現(xiàn)狀及應(yīng)用分析:(1)掌握 I2C 總線控制器驅(qū)動程序的使用方法; (2)掌握使用 I2C 總線控制器驅(qū)動程序訪問 CAT1025 的方法。(3)使用 I2C 總線控制器驅(qū)動程序編寫應(yīng)用程序,往 CAT1025 內(nèi)部寫入 16 個字節(jié),然后讀回并進行校驗。 I2C(inter-integrated-circuit)總線,是由菲利普公司開發(fā)的一種同步串行總線協(xié)議,用于連接微控制器及其外圍設(shè)備

2、,最初是為音頻和視頻設(shè)備開發(fā)的。如今I2C在各種電子設(shè)備中得到了廣泛的應(yīng)用。嵌入式系統(tǒng)中常常使用這個總線連接RAM,EEPROM以及LCD控制器等設(shè)備。I2C總線因協(xié)議成熟,引腳簡單,傳輸速率高,支持的芯片多,并且有利于實現(xiàn)電路的標準化和模塊化,得到了包括Linux在內(nèi)的很多操作系統(tǒng)的支持,受到開發(fā)者的青睞。Linux內(nèi)核中針對I2C的總線特性,其設(shè)備驅(qū)動使用了一種特殊的體系結(jié)構(gòu),開發(fā)I2C總線設(shè)備驅(qū)動程序就必須理解Linux的I2C總線驅(qū)動的體系結(jié)構(gòu)。2. 課題總體方案設(shè)計及功能模塊介紹:在嵌入式ARM平臺及Linux環(huán)境下,掌握I2C總線控制器驅(qū)動程序的使用方法,掌握使用I2C總線控制器驅(qū)

3、動程序訪問CAT1025的方法,向CAT1025內(nèi)部寫入多個字節(jié),然后讀回并進行校驗。功能模塊:CAT1025JI-30,E2PROM, I2C 總線(1) CAT1025JI-30 為了提高整個系統(tǒng)的可靠性,復位電路采用了帶手動復位的電源監(jiān)控復位芯片CAT1025JI-30。CAT1025JI-30 內(nèi)置有 256 字節(jié)的 E2PROM 存儲器,I2C 總線接口。工作頻率高達 203MHz所以使用了 S3C2410A芯片的 I2C 總線接口與其連接,電路原理如圖 1.12 所示。 圖 1.12如圖 1.12 所示,I2C 總線上拉電阻 R8、R9 的大小為 4.7K。CAT1025JI-30

4、 的器件地址為 0xA0, 如果用戶板(即底板)上需要使用地址為 0xA0 的 I2C器件, 或者需要將 I2CSDA、I2CSCL 用作 GPIO,則可以將電阻 R19、R20 拆除(圖 1.12 中的虛線框部分)。 說明:DeviceARM2410 默認配置時,R19、R20 是焊接的。CAT1025 內(nèi)部包含256字節(jié)的讀寫空間,通過 USB 總線讀/寫 CAT1025 時,包括下兩項操作: (1)讀 CAT1025:PC 通過 USB 總線發(fā)送讀命令(1 字節(jié)) ,S3C2410A從CAT1025 讀取 256 字節(jié),通過 USB 總線發(fā)回 PC。 (2)寫 CAT1025:PC 通過

5、 USB 總線發(fā)送 257字節(jié)(其中包括1字節(jié)的寫命令及 256字節(jié)的數(shù)據(jù)),S3C2410A 將 256 字節(jié)的數(shù)據(jù)寫入CAT1025。寫入成功后,將成功寫入的字節(jié)數(shù)(2 字節(jié))通過 USB 總線發(fā)回 PC。 可見,讀 CAT1025 時,PC 發(fā)送 1 字節(jié),但 S3C2410A返回 256 字節(jié)。 寫 CAT1025 時,PC 發(fā)送 257 字節(jié),但 S3C2410A返回 2 個字節(jié)。 為了編程方便起見,規(guī)定:PC 與 S3C2410A通過 USB 總線通信時,一幀的長度為 259字節(jié),一個幀的定義如下:寫 CAT1025 的過程與讀 CAT1025 的過程類似。寫 CAT1025 的過

6、程如圖 6.4 所示。PC 作為主動方,MagicARM2410 作為被動方。(1) PC 發(fā)送一個寫命令幀,命令為:寫命令(1 字節(jié)) ,數(shù)據(jù)長度字段:值為 256,數(shù)據(jù)字段為:要寫入 CAT1025 的 256 個字節(jié)。 (2) MagicARM2410 使用 USB 設(shè)備控制器驅(qū)動程序的讀端點函數(shù)接收到寫命令幀,就使用 I2C 總線控制器驅(qū)動程序提供的 API 函數(shù)將 256 字節(jié)寫入 CAT1025。 (3) MagicARM2410 使用 USB 設(shè)備控制器驅(qū)動程序的寫端點函數(shù),發(fā)送響應(yīng)幀到PC。響應(yīng)幀的數(shù)據(jù)長度字段為:成功寫入字節(jié)數(shù),數(shù)據(jù)字段則為無效。 (4)PC 收到響應(yīng)幀, 根

7、據(jù)響應(yīng)幀中成功寫入字節(jié)數(shù), 就可判斷寫 CAT1025 是否成功。至此,寫 CAT1025 操作完成。(2) E2PROM 存儲器電路 :EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲器-一種掉電后數(shù)據(jù)不丟失的存儲芯片。 EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。一般用在即插即用。(3) I2C 總線控制器:I2C總線是器件間串行傳輸總線,以其規(guī)范和帶I2C接口的外圍器件獲得廣泛應(yīng)用。S3C2410處理器內(nèi)置有I2C總線接口。I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,

8、可發(fā)送和接收數(shù)據(jù),每個器件都有一個唯一的地址識別。I2C總線在傳送數(shù)據(jù)過程中共有3種信號:(1)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。(2)結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。(3)應(yīng)答信號:接收數(shù)據(jù)的IC接收到8 bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實際情況做出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,則判斷為受控單元出現(xiàn)故障。圖1為S3C2410和ZLG7290的連接圖。(a)驅(qū)動模塊的結(jié)構(gòu):S3C2410A

9、 微控制器內(nèi)嵌了一個 I2C 總線控制器。在 Linux 操作系統(tǒng)中,該控制器的字符型驅(qū)動包括以下四個模塊,它們對應(yīng)的源程序及簡介如表 6.1 所示。當需要使用 I2C 總線控制器驅(qū)動模塊時,可以使用 I2C 總線控制器驅(qū)動的設(shè)備管理文件loadi2c,其內(nèi)容如程序清單6.1所示。本管理文件運行后,將自動在 Linux 的/dev/目錄下創(chuàng)建設(shè)備節(jié)點 i2c。I2C 總線控制器驅(qū)動 (字符型) 提供的 API 函數(shù)除了 read()與 write()以外, 還提供了 ioctl()函數(shù)用于設(shè)定 I2C 總線控制器的一些參數(shù),該函數(shù)常用的命令列表如表 6.2 所示,該函數(shù)可以使用的全部命令請見驅(qū)

10、動源碼中的 i2c.h 文件的具體說明??衫胕oct1函數(shù)操縱虛終端設(shè)備文件,實現(xiàn)與Unix系統(tǒng)內(nèi)核的交互,得到我們所需要的服務(wù)。使用ioct1的具體形式如下: int ioct1(int filedes,int request,/參數(shù)/) 其中filedes為打開的虛終端設(shè)備文件描述符,request為請求的服務(wù),隨后的參數(shù)可為各種數(shù)據(jù)類型,視具體情況而定。(b)驅(qū)動源文件的編譯:驅(qū)動源文件包括i2c-algo-s3c2410c,i2c-devc,i2c-corec,i2c-s3c2410c4個源文件。將其編譯為模塊,則產(chǎn)生4個模塊文件,編譯工作由Makefile文件完成,其文件內(nèi)容如圖1

11、所示:當需要使用I2C總線控制器驅(qū)動模塊時,可以使用I2C總線控制器驅(qū)動的設(shè)備管理文件loadi2c。該管理文件運行后,將自動在Linux的dev目錄下創(chuàng)建設(shè)備節(jié)點i2c,如圖2所示: 圖1 圖23系統(tǒng)硬件平臺及接口設(shè)計; 硬件: PC 機 一臺 MagicARM2410 教學實驗開發(fā)平臺 一套 嵌入式系統(tǒng)調(diào)試模型4 . 系統(tǒng)軟件功能設(shè)計,程序流程圖及代碼實現(xiàn): 軟件功能設(shè)計步驟:(1) 在 PC 端,打開終端或者進入虛擬控制臺,進入 arm實驗目錄/zylinux/armwork/,為本實驗新建工作目錄 cat1025。 $ cd /zylinux/armwork $ mkdir cat10

12、25 (2) 使用vi在cat1025文件中建立文件 cat1025.c,編寫實驗代碼并保存。(退出時按Esc+:+wq) $ vi cat1025.c (3) 修改 Makefile使其適合于本實驗。 EXEC = cat1025 OBJS = cat1025.o SRC = cat1025.c (4) 編譯程序,生成可執(zhí)行代碼 cat1025。 $ make 或者跳過第三第四部直接arm-linux-gcc cat1025.c o cat1025.o(5)啟動 ARM Linux。將實驗箱串口 0 和 PC 主機串口相連,同時將網(wǎng)線插入實驗箱網(wǎng)卡,將實驗箱接入以太網(wǎng)。在 PC 端打開 mi

13、nicom 或者超級終端,并進行正確設(shè)置(6) 進行NFS連接, 將主機NFS共享目錄的/zylinux/armwork目錄mount到ARM Linux的/mnt 目錄下。 # mount t nfs 192.168.0.94:/zylinux/armwork /mnt o nolock (7)進入 I2C總線控制器驅(qū)動程序所在目錄,先加載 I2C 驅(qū)動,然后進入 cat1025 目錄,運行程序,查看運行結(jié)果。 #./loadi2c# ./cat1025 程序代碼:#include <stdio.h> #include <unistd.h> #include <

14、fcntl.h> /* 文件操作 */ #include "i2c.h" /* I2C總線控制器驅(qū)動命令 */ #define I2C_ADDR 0xA0 /* CAT1025從機地址 */ int main() int fd,ret,i; unsigned char suba; char buf9 = 0,1,2,3,4,5,6,7,8; fd = open("/dev/i2c/0", O_RDWR); /* 打開設(shè)備 */ if(fd = -1) printf("Can't open I2C device!n");

15、exit(-1); ret = ioctl(fd, I2C_TENBIT, 0); /* 指定從機地址為7bit */ if (ret != 0) printf("Can't set I2C address bit number.n"); close(fd); exit(-1); ret = ioctl(fd, I2C_SLAVE, I2C_ADDR >> 1); /* 設(shè)置從機地址,7位地址,須右移1位*/ if (ret != 0) printf("Can't set I2C slave device address.n"

16、); close(fd); exit(-1); printf("Write CAT1025:n"); for(i = 1; i < 9; i+) printf("%d ", bufi); ret = write(fd, buf, 9); /* 寫8個字節(jié)到CAT1025,第1字節(jié)為子地址*/ if (ret != 9) printf("Write CAT1025 failed.n"); close(fd); exit(-1); usleep(10000); /* 等待10ms寫入完成確保數(shù)據(jù)完全寫入 CAT1025,也保證CAT

17、1025 退出“忙”狀態(tài) */ printf("nRead CAT1025:n"); suba = 0; ret = write(fd, &suba, 1); /* 發(fā)送從機子地址,讀 CAT1025 時,必須先用“寫”操作來設(shè)定從機子地址,然后才能執(zhí)行讀操作 */ if (ret != 1) printf("send slave address fail.n"); close(fd); exit(-1); ret = read(fd, buf, 8); /* 從CAT1025讀8個字節(jié) */ if (ret = 8) for (i = 0; i

18、 < 8; i+) printf("%d ", bufi); else printf("Read CAT1025 failed.n"); close(fd); exit(-1); printf("nRead and Write CAT1025 sucessfully!n"); return 0; 說明:“$”開始的命令為在 PC 主機輸入的命令; “#”開始的命令為在實驗箱端輸入的命令。除非特殊說明,下同。(1) EXEC:最終生成的可執(zhí)行文件,需要根據(jù)應(yīng)用進行修改; (2) OBJS: 生成的目標文件,需要根據(jù)應(yīng)用進行修改(必

19、須和源文件同名,不包括后綴) ; (3) SRC:源文件,需要根據(jù)應(yīng)用進行修改。 (4) CC:指定了編譯器為交叉編譯器 arm-linux-gcc;5 . 實驗測試、結(jié)果分析:1)當buf9 = 0,1,2,3,4,5,6,7,8源程序運行后在終端打印出實驗結(jié)果:Write CAT1025: 1 2 3 4 5 6 7 8 Read CAT1025: 1 2 3 4 5 6 7 8 Read and Write CAT1025 sucessfully!2)當buf17 = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16時在終端打印出實驗結(jié)果:Write CA

20、T1025: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16Read CAT1025: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16Read and Write CAT1025 sucessfully!3)當buf21 = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20運行后在終端打印出實驗結(jié)果:Write CAT1025: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Read CAT1025: 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 255 255 255 255Read and Write CAT1025 sucessfully!結(jié)果分析:如果寫入 CAT1025 的數(shù)據(jù)大于 16 字節(jié),則寫正常讀不正常,這是因為每次寫CAT1025只能寫一頁 (16字節(jié))這跟EEPROM的頁寫問題有關(guān),即那應(yīng)該如何編寫程序?qū)崿F(xiàn)呢?以下函數(shù)根據(jù)要求寫入的字節(jié)數(shù)來決定寫多少頁以及寫不夠一頁的數(shù)據(jù)。主函數(shù)6 . 總結(jié)、心得體會:通過對EEPROM,i2c以及l(fā)inux的研究總結(jié)了一下幾點:(1)讀沒有頁的問題,可以從任意地址開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論