張鵬
(漢中職業(yè)技術(shù)學院汽車與機電工程學院,陜西漢中,723002)
LBC(Local Bus Controller)即局部總線控制器,其主要負責對外部存貯器的訪問,該控制器提供了到多種類型存貯設(shè)備的接口,同時該控制器負責控制八個存貯體(bank),并由二個UPM機和一個GPCM機所共享,負責與Flash和nvRAM的通訊。
本設(shè)計的基本開發(fā)環(huán)境,即采用FT2000處理器Local Bus接口的八個存貯體不同片選模式,來訪問外接存儲器Flash和nvSRAM設(shè)備,以此實現(xiàn)對數(shù)據(jù)的各項讀寫擦等操作。FT2000芯片是一款集成了4個新一代高性能處理器內(nèi)核FTC663的CPU,它采用亂序四發(fā)射超標量流水線,兼容64位ARMV8指令集并支持ARM64和ARM32兩種執(zhí)行模式,支持單精度、雙精度浮點運算指令和ASIMD處理指令,支持硬件虛擬化。同時,該芯片適用于構(gòu)建有更高性能、能耗比和安全需要的桌面終端、輕量級服務(wù)器和嵌入式低功耗產(chǎn)品。
本設(shè)計中外接外接Flash(Am29LV256M)和nvSRAM(STK14CA8)存儲設(shè)備。
設(shè)計中應(yīng)用 AM29LV256M(16M*16-Bit/32M*8Bit)芯片作為通用扇區(qū)Flash存儲器,該款芯片具有高性能,低功耗,單電壓支持讀、擦、寫等優(yōu)點,同時,可通過BYTE引腳置位來選擇支持16bit/8bit寬度的數(shù)據(jù)總線。
在LBC模塊操作的初始化中,F(xiàn)lash支持GPCM(通用片選機)和UPM(可選寄存器)兩種不同的控制機模式訪問數(shù)據(jù),并且,當寄存器BRn[7:5]配置為000時,即是GPCM模式,寄存器BRn[7:5]配置為100/101時,即是UPM模式。其中,GPCM模式為簡單、性能較低的存貯器和內(nèi)存映射設(shè)備提供使用接口,其不支持突發(fā)傳輸。在Flash的操作中,還需要對兩個基本的寄存器組BRn和ORn配置,用來定義Flash的基地址和其地址屏蔽位。
而UPM模式可以用來產(chǎn)生較為靈活且用戶定義控制信號的定時操作,該模式還可以通過軟件啟動定義讀、寫、突發(fā)讀或突發(fā)寫期間的外部控制信號。同時,在設(shè)計Flash操作中用UPM的核心內(nèi)部RAM陣列,并通過這個陣列確定給定時鐘周期在外部存貯器控制信號(字節(jié)選和片選)上驅(qū)動的信號線。
設(shè)計中應(yīng)用STK14CA8(128k*8)非易失性RAM存貯器作為另一存儲設(shè)備,該芯片具有較高的存貯性能和快速的訪問時間,同時可無限次進行Read、Write、Recall等操作。
類似外接設(shè)備Flash的操作,在LBC模塊操作的初始化中,nvSRAM也支持GPCM(通用片選機)和UPM(可選寄存器)兩種不同的控制機模式訪問數(shù)據(jù),且配置寄存器BRn[7:5]的模式也是相同。
其中,在GPCM模式下,首先必須對兩個32位寄存器組基寄存器(BRn)和可選寄存器(ORn)進行配置,其中基寄存器(BRn)用于定義SRAM基地址和其地址屏蔽位AM,而最低的0bit位(V)即為BRn和ORn內(nèi)容的有效位置位。而在UPM模式下,同樣用到UPM的核心內(nèi)部RAM陣列,在對RAM陣列中,每一個RAM陣列都包含64個32位字,根據(jù)每一個字提供的比特位訪問外部SRAM總線時鐘周期。
本設(shè)計在LBC操作中,必須先對局部總線配置寄存器(LBCR)做出了相應(yīng)配置,保證LBC處于空閑無數(shù)據(jù)傳輸狀態(tài),然后對LBCR寄存器操作,當LBCR[BUSY_MM]置1時LBC位空閑狀態(tài)。
對于LBC初始化狀態(tài),由于接口層傳入了不同外設(shè)的配置參數(shù),故在初始化狀態(tài)中需要做出,對傳入不同片選和工作模式的設(shè)置、BRn寄存器和ORn寄存器各Bit位的配置、時鐘分頻和端口的配置等。對于不同的片選和工作模式,就是對外部的Flash和Sram分別選擇八個存貯體bank當中的某兩個進行的操作,接口層傳入的參數(shù)也需要完成GPCM和UPM工作模式進行配置,并根據(jù)Flash和Sram中需要不同功能,配置寄存器BRn和寄存器ORn。
設(shè)計中的時鐘分頻,即LBC的系統(tǒng)時鐘和外部設(shè)備總線時鐘(LCLK[2:0])之間2、4、8的比率配置,該比率主要通過對時鐘比率寄存器LCRR[CLKDIV]進行軟件設(shè)置的。在考慮時鐘分頻后,需要結(jié)合外部地址延時周期寄存器LCRR[EADC]進行配置不同的循環(huán)延時周期數(shù),用以滿足訪問外部設(shè)備數(shù)據(jù)/地址/片選/讀寫等不同信號線的保持時間。
在底層LBC的操作中,外部設(shè)備Flash和nvSram通過訪問LBC模塊進行正常的讀寫擦等操作,其中,設(shè)計需要LBC模塊對不同外接設(shè)備端口大小進行讀寫,即進行LBC字節(jié)/字/雙字讀和寫的函數(shù)操作。
(1)硬件總體結(jié)構(gòu)
本設(shè)計LBC模塊外接存儲器件Flash(Am29LV256M)和nvSRAM(STK14CA8)的硬件連接方式如圖1所示。在硬件連接中,首先將FT2000主控中LBC模塊引出連接DM74HC573八路輸出鎖存器芯片,當LBC模塊與Flash(Am29LV256M)和nvSRAM(STK14CA8)進行數(shù)據(jù)交換時,通過DM74HC573片選其中兩路訪問控制向Flash和nvSram寫入指定地址,在存儲器設(shè)備接收到主控發(fā)過來的地址數(shù)據(jù)時,直接向LBC模塊反饋回讀寫擦相關(guān)數(shù)據(jù)。
圖1 硬件總體結(jié)構(gòu)
(2)軟件設(shè)計框架
本設(shè)計軟件部分總體分為三部分:LBC Initialization、LBC Oprate、Application Interface,如圖2所示。
圖2 軟件設(shè)計框架
LBC Initialization:主要對LBC進行初始化配置,設(shè)置基地址偏移、片選有效、端口大小、選擇UPM或GPCM控制機工作模式、設(shè)置操作時鐘等配置。
LBC Oprate:主要實現(xiàn)對LBC總線的不同字節(jié)、字、雙字的讀寫等操作。
Application Interface:主要是對外接Flash進行Read、Program、Erase等操作及Flash工作模式配置,對外接nvSRAM進行Read、Write、Store等操作。
本設(shè)計基于上文硬件結(jié)構(gòu)及軟件設(shè)計框架,按照如下流程進行LBC驅(qū)動程序設(shè)計。
首先,對LBC模塊進行初始化,其中包括LBC模塊自由等待的相關(guān)配置操作,存儲器的基本配置,LBC中基地址、片選、時鐘分頻的基本操作。
其次,完成LBC模式選擇,當配置成GPCM模式時,直接進入Flash和nvSram存儲器選擇階段,同時進行LBC模塊端口bit位設(shè)置。當配置成UPM模式時,再次進行UPMA/UPMB操作,開始RAM 信號讀寫,Burst信號讀寫等操作,當UPM模式結(jié)束后,進入Flash和nvSram存儲器選擇階段,同時進行LBC模塊端口位設(shè)置。
然后,繼續(xù)進行LCB模塊數(shù)據(jù)交換操作,即分別對底層LBC中數(shù)據(jù)Byte、Word讀寫,Burst讀寫等操作。
最后,完成Flash和nvSram存儲器的配置操作。
在本設(shè)計中,通過Vivado仿真環(huán)境中進行軟件波形仿真操作,同時借助串口調(diào)試工具打印數(shù)據(jù),兩種方式來驗證Flash和nvSRAM不同工作模式下的數(shù)據(jù)讀寫擦等操作。在仿真中,首先在Vivado環(huán)境中完成相關(guān)配置生成SDK文件,同步在SDK生成的文件中,加載本設(shè)計的LBC驅(qū)動程序,進行編譯,鏈接調(diào)試等步驟,生成.elf文件,進行波形仿真操作。
對于Flash操作,設(shè)計通過仿真環(huán)境,加入測試程序調(diào)試,分別進行了Flash的GPCM模式和UPM模式的片擦、扇區(qū)擦、讀、寫的操作仿真。
例如應(yīng)用4分頻/1 cycle 測試,測試代碼如下:
Flash_LBC_Init_();
Flash_LBC_Chip_Erase(LBC_CS0);
Flash_LBC_Sector_Erase(LBC_CS0,0x00000002);
Flash_LBC_Program_Byte(LBC_CS0,0x-00000008,0x78);
Flash_LBC_Program_Word(LBC_CS0,0x-0000000A,0x5678);
Flash_LBC_Read_Byte(0x00000008,data1);
Flash_LBC_Read_Word(0x0000000A,data2);
通過不同的測試程序,完成了GPCM和UPM兩種模式下的全部操作,抓取地址數(shù)據(jù)波形,對比通過串口寫入數(shù)據(jù)、讀取數(shù)據(jù)、擦除數(shù)據(jù)打印結(jié)果,所有結(jié)果完全一致,最終驅(qū)動程序完成Flash的數(shù)據(jù)讀寫擦等操作。例如:Read_Byte/Word操作仿真波形如圖3。
圖3 Read_Byte/Word
同理,在nvSRAM操作中通過抓取地址數(shù)據(jù)波形,加入測試程序調(diào)試,分別進行了nvSRAM的GPCM模式及UPM模式的讀、寫、存貯等的操作,同步通過串口打印數(shù)據(jù)對比和波形仿真圖抓取數(shù)據(jù),數(shù)據(jù)結(jié)果一致,完成驅(qū)動nvSRAM的數(shù)據(jù)交換操作。
本文完成了FT2000HK中LBC外接存儲器驅(qū)動程序設(shè)計,通過文中對硬件及軟件的介紹,讓人們對存儲器數(shù)據(jù)交換相關(guān)操作有了基本的了解,同時對外接存儲設(shè)備驅(qū)動技術(shù)有了掌握。隨著電子信息技術(shù)的飛速發(fā)展,數(shù)據(jù)的存儲穩(wěn)定性、容量已經(jīng)成為直接決定數(shù)據(jù)安全、可靠的基本保障,而如何高效驅(qū)動存儲器件在未來必將占據(jù)更重要的地位。