工控網首頁
>

應用設計

>

TransFlash存儲卡在嵌入式系統調試中的應用

TransFlash存儲卡在嵌入式系統調試中的應用

2013/9/25 10:32:50

嵌入式系統調試一般使用串口、JTAG、USB或網卡來下載系統鏡像到目標機中。使用串口下載鏡像,協議簡單,接口通用,但傳輸速率太慢。使用JTAG下載鏡像,傳輸速率較高,但需要專用的JTAG調試器,價格較高,限制了調試環境。使用USB或網卡下載鏡像速度快、接口通用,但一般做成產品后的嵌入式設備不需要留出通用的USB或以太網接口,從而增加了設計的復雜性和開發成本。在移動嵌入式產品開發過程中,如果使用TransFlash(TF)卡代替USB或以太網口,由于TF卡一般又都是移動嵌入式產品的必要構成部分,這樣做一般可以減小嵌入式系統調試的復雜性和成本。本文提出使用TF卡更新鏡像的方法,并在實際的嵌入式系統調試中成功應用。使用TF卡下載系統鏡像,速度與通用性都很好,既省去了調試中對其他下載設備的設計需求,又解決了最終產品大容量存儲器的設計問題。 1 TransFIash卡與應用處理器的連接電路設計 本文調試的嵌入式系統,是一種視頻數據采集與傳輸單元,以PXA310為中央處理器,采集到的視頻數據由PXA310進行壓縮編碼處理,之后發送到網絡中去,供用戶查看。系統調試過程中,視頻數據可以存儲到TF卡中。 TF卡模塊在系統中主要有兩個方面的作用: 一是在嵌入式系統開發調試過程中用于將系統鏡像到目標版; 二是作為最終嵌入式系統產品的大容量存儲器。 SD卡有兩個可選的通信協議:SD模式和SPI模式。SD模式是SD卡標準的讀寫方式,但要求主控制器帶有SD卡控制器。PXA310本身沒有TF卡控制器接口,選用SD模式通信就無形中增加了產品的硬件成本,選擇SPI模式可以說是一種最佳的解決方案,相對于SD模式,SPI模式接口與協議簡單、易于操作。這時TF卡在PXA3 10 MMC/SD/SDIO主控制器控制下工作。 2 Blob中TF卡的驅動設計以及FAT32文件系統移植 2.1 設計TF卡SPI模式驅動 TF卡操作遵循SD卡協議,TF卡的操作完全與SD卡相同。相對于SD模式,SPI模式接口與協議簡單、易于操作。PXA310帶有MMC/SD/SDIO主控制器,但由于Blob中沒有提供SD卡與主控制器的具體驅動,實現完整驅動的難度較大,故本文采用GPIO口模擬的SPI模式讀寫TF卡,運行到Linux內核后再加載主控制器驅動運行SD模式的方式,性能與實現難度都可兼顧。

TransFlash存儲卡在嵌入式系統調試中的應用

SPI模式TF卡總線采用主從問答式協議。主機發送命令Command,TF卡應答回復Response。SD卡命令有兩種,CMDx和ACMDx。ACMD是應用指令集,屬于擴展指令集,在發送任何的ACMD之前,必須先發送CMD55激活,才可以使用ACMD指令集。發送完一個ACMD,并且卡響應了此指令之后,CMD55的作用就消失了,所以要發送多個或多次發送一個ACMD,需要循環發送CMD55+ACMD。 2.2 SPI模式初始化TF卡流程 TF卡默認的通信模式是SD模式,本文要在SPI模式下設計TF卡驅動,需要從SD模式切換到SPI。為此,先將TF卡上電,延時74個時鐘周期后發送復位命令CMD0,同時將SD卡的CS片選信號置低,若此時接收到應答信號為0x01,說明TF卡進入了SPI模式。 TF卡與MMC卡都可用SPI模式驅動,故在初始化時可考慮與MMC卡的兼容性。在發送CMD0成功接收到應答信號后,連續發送CMD55+ACMD41,若CMD55回復0x01而ACMD41回復0x00,則TF卡初始化成功。若沒有完整的應答,則改發CMD1,若CMD1成功回復0x00,則MMC卡初始化成功。 在SPI模式下,TF卡的初始化時鐘頻率不能超過400 kHz。初始化成功后,就可以配置高速時鐘下TF卡的讀寫操作了。圖2為TF卡初始化流程圖。

TransFlash存儲卡在嵌入式系統調試中的應用

在Blob中完成TF卡初始化,還需要初始化PXA310的GPIO口,并根據對應TF卡的引腳配置其輸入輸出關系。 在Blob中,PXA3 10的PXA_SD_D2、PXA_SD_D3、PXA_SD_CMD、PXA_SD_CLK、PXA_SD_D0、PXA_SD_D1這幾個I/O口并沒設置為GPIO口,不能在軟件上進行讀寫操作,要使用SPI模式,必須將這幾個IO口設置為GPIO。通過在MFP寄存器中配置IO口的功能號,再配置相應參數即可實現。 2.3 通過SPI讀寫TF卡的程序設計 TF卡的讀寫以塊為單位,初始化完成后,使用CMD16設置SD卡讀寫塊長度(512 B),發送CMD17和CMD24讀單塊寫單塊,發送CMD18和CMD25讀多塊和寫多塊。實現TF驅動層中讀寫函數的邏輯流程如圖3所示。

TransFlash存儲卡在嵌入式系統調試中的應用

2.4 FAT32文件系統移植 在文中,FAT32文件系統移植主要包括系統初始化和文件管理程序修改(主要是文件讀取)。FAT32的初始化就是找到各個部分的起始扇區位置。首先查找MBR的分區表,獲取分區信息,然后找到每個分區的DBR,再根據DBR中的BPB得到分區的起始扇區、結束扇區、文件系統類型、FAT表個數、每簇占用扇區數等信息。最后根據下面的算法得到文件分配表FAT、文件目錄表FDT和數據區DATA的起始扇區。FAT32讀取文件流程如圖4所示。

TransFlash存儲卡在嵌入式系統調試中的應用

2.5 設計Blob命令下載系統鏡像 Blob啟動之后,首先初始化一些基本的硬件設備如串口等,然后檢測系統內存映射,設置CPU運行頻率等一些參數,接著就進入了命令行模式。 在Blob中提供tfdownload命令,主函數的形參就是接收到的命令內容和參數。若參數為“init”,則調用TF卡驅動的初始化,否則將此參數作為文件名傳給FAT32文件系統打開并讀取文件內容。最終實現“tfdownloadinit”調用TF卡驅動初始化TF卡。使用“tfdownload”+文 件名可以調用FAT32文件系統和TF卡的驅動下載該文件名的鏡像到內存中。 2.6 MakeFile文件修改與交叉編譯 (1)TF卡驅動與FAT32文件系統編譯 按照Blob中驅動程序的結構,TF卡驅動與FAT32文件系統源文件保存在/src/blob/Platform/Common/Source目錄下,而FAT32文件系統頭文件在/src/blob/Platform/Common/include目錄下,要在編譯Blob的時候將添加的驅動一起編譯,需要更改相應的Makefile。 在/src/blob/Platform/Source下有三個Makefile文件,分別是Makefile.am,Makefile和Makefile.in,修改Makefile.am即可,Makefile和Makefile.in會自動修改。主要增加Makefile的頭文件尋找目錄和編譯文件。 (2)Blob命令編譯 src/commands下的命令編譯由同目錄的Makefile確定,同樣需要修改Makefile使添加的命令編譯到Blob中去。另外,要使該命令在Blob中生效,還需要修改Blob的configure.in文件,在configure.in中添加:blob_commands=“$blob_commands,tfdownload”;。 (3)編譯Blob linux-2.6.25中集成了Blob,用linux-2.6.25的工具鏈編譯好之后,在…/pxalinux/MHN-LINUX-PLATFORM/rel/target/bin中,boot_nontrust.bin就是生成的Blob鏡像。 2.7 系統鏡像下載的實現 先用tfdownload init命令初始化TF卡驅動,然后使用tfdownload下載系統鏡像到內存中,再使用Nandwrite命令寫入NandFlash中。 3 Android下掛載TF卡實現數據存儲 在Android系統中使用TF卡做儲存器,必須先將TF卡掛載到Android上。要啟用void,需要在Android啟動配置文件init.rc中關閉mountd并開啟void服務。通過對配置文件init.rc進行下面的修改完成此項功能。 service void/system/bin/void //vold服務開啟 socket void stream 0660 root mount …… #service mountd/system/bin/mountd//mountd服務關閉(被注釋了) #socket mountd stream 0660 root mount void.conf文件是void程序掛載設備的配置文件,里面記載了掛載設備的設備路徑、設備類型以及掛載的目標位置(掛載點)。需要在該文件中加入TF卡的掛載信息,然后,將void.conf加入到system/etc目錄下,void程序就可以直接讀取該配置文件了。 FAT32屬于Windows分區,因為Windows分區里面的文件是沒有權限這個概念的,所以在Linux系統中使用此分區時要手動指定默認權限。掛載TF卡之后Android的/sdcard目錄不能直接通過chmod命令來修改對于system組的讀寫權限,在system下是無法直接訪問TF卡的,需要在掛載的時候添加權限。在void中,真實掛載TF卡的操作如下: rc=mount(deVpath,vol->mount_point,“vfat”,flags,“utf8,uid=1000,gid=1000,fmask=711,dmask=700,shortname=mix ed”); 其中uid代表屬主,uid=1 000代表system用戶,fmask和dmask分別對應文件和目錄的權限8進制碼的反碼。 4 設計結果展示 本文調試的數據采集與傳輸單元實物如圖5所示,TF卡位于PCB板右上角。使用該單元錄制視頻并保存在TF卡中,設定錄制時間為30 s,30 s后關閉,取出TF卡,將TF卡與PC連接,錄像文件效果如圖6所示。

TransFlash存儲卡在嵌入式系統調試中的應用

TransFlash存儲卡在嵌入式系統調試中的應用

使用TF卡下載系統鏡像操作步驟如下: (1)用“tfdownload init”命令初始化TF卡驅動,返回“TF CARD INIT SUCCESS!”即表示TF卡初始化成功。 (2)然后使用“tfdownload”+文件名的方式下載系統鏡像到內存中,顯示“TFCARD download done!”即表示TF卡下載鏡像成功。 (3)最后使用Nandwrite命令將內存中的鏡像寫入NandFlash中,返回“Done!”即表示寫入成功。

TransFlash存儲卡在嵌入式系統調試中的應用

使用vold掛載TF卡的操作結果如圖7所示。其中“logcat—s void”用來顯示void運行的輸出信息。“New MMC card‘0000’added”表示成功加載TF卡,“Disk…..New blkdev 179.0”表示TF卡作為一個塊設備被成功加載,“Partition…..New blkdev 179.1”表示TF卡第一個分區被成功加載,“Successfully mounted vfat filesystem179:1”表示成功掛載FAT32分區。到這一步,Android系統就已經成功掛載了FAT32系統的TF卡。 5 結語 本文結合嵌入式開發調試和嵌入式大容量存儲的背景,提出并實現了一個使用TF卡進行嵌入式系統開發調試及存儲應用的方案。在嵌入式系統調試中使用TF卡下載系統鏡像,速度與通用性都很好,還可以很方便的和PC機交換數據。作為嵌入式產品的一個構成部分,使用TF卡調試既省去了其他下載設備的設計,又可以在系統中作為大容量存儲器使用。本文具體完成的工作包括TF卡同應用處理器的連接電路設計、TF卡的驅動程序設計和FAT32文件系統移植、在Android平臺下實現了TF卡的自動掛載。

投訴建議

提交

查看更多評論
其他資訊

查看更多

超越傳統直覺,MATLAB/Simulink助力重型機械的智能化轉型

新大陸自動識別精彩亮相2024華南國際工業博覽會

派拓網絡被Forrester評為XDR領域領導者

智能工控,存儲強基 | 海康威視帶來精彩主題演講

展會|Lubeworks路博流體供料系統精彩亮相AMTS展會