趙 怡
(山西工程科技職業(yè)大學(xué),山西 晉中 030600)
FSMC是英文Flexible Static Memory Controller的首字母縮寫,即可變的靜態(tài)存儲控制器。這個接口既可以當(dāng)作GPIO使用,也可以連接諸如SRAM、ROM以及PSRAM等類型的外部存儲設(shè)備,并按照存儲設(shè)備自身的控制時序進(jìn)行適應(yīng)性設(shè)置,靈活可變。FSMC接口能實現(xiàn)類似于8080總線的控制功能,本文對接口SRM模式應(yīng)用進(jìn)行了研究,定義數(shù)據(jù)、地址和控制總線,在裝置內(nèi)作為一個系統(tǒng)總線使用。
引腳數(shù)在100腳以上的STM32芯片都帶有FSMC接口,從芯片外部看,它是ARM處理器按照總線格式組合而成的一個IO引腳集合,圖1所示為STM32F103ZGT6的FSMC接口框圖,有三組專用控制器信號線和一組通用控制信號線。三組專用控制器信號線分別是NOR/PSRAM控制器信號線、NAND控制器信號線和PC控制器信號線,通用控制信號線是共享于其他控制器的信號線,包括有數(shù)據(jù)線、地址線和控制線[1-2]。
FSMC從內(nèi)部結(jié)構(gòu)上看,包含AHB總線、配置寄存器、NOR/PSRAM控制器、NAND/PC控制器、時鐘及中斷控制線。
ARM處理器將FSMC接口資源按照外部存儲設(shè)備進(jìn)行分類管理,共分成4個BANK,如圖2所示,BANK1是SRAM/ROM存儲空間,大小為256MB,地址從60000000H到6FFFFFFFH;BANK2和BANK3是NAND Flash存儲空間,大小為512MB,地址從70000000H到8FFFFFFFH;BANK4是PC CARD存儲空間,大小為256MB,地址從90000000H到9FFFFFFFH。
圖2 FSMC映射地址空間管理
本文設(shè)計選擇SRAM模型,在該模型下,總線地址空間為60000000H~6FFFFFFFH。
FSMC通過設(shè)置ARM寄存器選擇應(yīng)用模型,此時,ARM上的IO引腳開始充當(dāng)總線對外部設(shè)備進(jìn)行讀寫操作,如圖3所示。
圖3 FSMC對外部設(shè)備進(jìn)行讀寫操作
點火控制裝置用于某型發(fā)動機(jī)點火控制,主要完成發(fā)動機(jī)點火、點火回路阻值采集和點火電源采集,裝置由主控板、電源板和點火控制板組成。
點火控制裝置I/O擴(kuò)展主要由FSMC和CPLD實現(xiàn),使用的FSMC資源是BANK1的SRAM/ROM存儲空間,地址線60000000H到600001FFH,FSMC數(shù)據(jù)線、地址線和控制線說明見表1。
表1 FSMC資源及功能
繼電器控制信號是CPLD對FSMC地址線和數(shù)據(jù)線譯碼產(chǎn)生的,FSMC地址決定了被控的繼電器是哪一個,FSMC數(shù)據(jù)決定繼電器的狀態(tài)是斷開還是接通。
如圖4所示,繼電器J1對應(yīng)FSMC地址為0X10,繼電器J2對應(yīng)FSMC地址為0X20,FSMC數(shù)據(jù)0XFF對應(yīng)CPLD引腳輸出高電平,數(shù)據(jù)0X00對應(yīng)CPLD引腳輸出低電平。
圖4 繼電器控制原理圖
則當(dāng)主控程序執(zhí)行outputb(0X10,0XFF)時,CPLD第98引腳輸出高電平,DR7=1,繼電器J1將接通,而當(dāng)主控程序執(zhí)行outputb(0X10,0X00)時,CPLD第98引腳輸出低電平,DR7=0,繼電器J1將斷開。同理,當(dāng)主控程序執(zhí)行outputb(0X20,0XFF)時,繼電器J2將接通,而當(dāng)主控程序執(zhí)行outputb(0X20,0X00)時,繼電器J2將斷開[2]。
回路阻值檢測電流是恒定的10 mA電流,根據(jù)歐姆定律,AD將采到的電壓除以10 mA電流就可以得到阻值。阻值信號通過AD的并口送到CPLD,CPLD再將數(shù)據(jù)送到FSMC數(shù)據(jù)總線。具體過程如下。點火控制板上電后對AD轉(zhuǎn)換芯片AD7609進(jìn)行初始化:
復(fù)位端信號置0持續(xù)10ms后再置1完成芯片復(fù)位,然后片選置1,CONV引腳置1啟動轉(zhuǎn)換。上述過程也是通過FSMC總線實現(xiàn)。
當(dāng)AD芯片完成數(shù)據(jù)轉(zhuǎn)換后,通過一個電平變化給出完成信號,通知主控板此時可以接收數(shù)據(jù),主控程序通過這一信號運(yùn)行中斷程序,執(zhí)行inputb(0X43),將數(shù)據(jù)從CPLD輸入FSMC接口,0X43是CPLD并行數(shù)據(jù)線的地址。
STM32F103固件庫提供了標(biāo)準(zhǔn)的FSMC初始化函數(shù),對于SRAM時序模型,只使用FSMC_NORSRAMInit()初始化函數(shù),表2列出了FSMC控制總線參數(shù)。
表2 FSMC參數(shù)及含義
FSMC初始化函數(shù)具體如下:
void FSMC_SRAM_Init(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能外設(shè)時鐘
readWriteTiming.FSMC_AddressSetupTime = 0x01; //地址建立時間
readWriteTiming.FSMC_DataSetupTime = 0x0A; //數(shù)據(jù)建立時間
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00; //總線轉(zhuǎn)換周期
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //總線類型
FSMC_NORSRAMInitStructure.FSMC_Bank=FSMC_Bank1_NORSRAM1; //存儲區(qū)映射區(qū)域
FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM; // 存儲器類型
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; // 存儲器數(shù)據(jù)寬度
}
初始化中的地址建立時間數(shù)據(jù)建立時間是根據(jù)FSMC總線上的設(shè)備時序特征確定的,具體到本設(shè)計中,即考慮如何設(shè)置FSMC讀周期時序中地址建立時間和數(shù)據(jù)建立時間參數(shù),使得其滿足AD轉(zhuǎn)換芯片AD7609BSTZ的讀周期時序。
如圖5所示為FSMC讀周期時序,NOE是讀信號,其高電平時長為ADDSET+1個HCLK周期(每個HCLK周期27ns左右),低電平時長為DATAST+3個HCLK周期,其中的2個HCLK周期是采集后的數(shù)據(jù)存儲時間。
圖5 FSMC時序建立原理圖
通過比較,ADDSET的值設(shè)置為2個HCLK周期(約54ns),可滿足AD7609BSTZ讀信號高電平時長大于15ns的要求,所以在初始化中設(shè)置AddressSetupTime = 0x01。同理,FSMC低電平時長不能小于AD7609BSTZ的19ns的要求,為了保證采集數(shù)據(jù)可靠性,低電平持續(xù)時間設(shè)置較長,為13個HCLK周期(約351ns),即DataSetupTime = 0x0A,足以保證AD7609BSTZ的數(shù)據(jù)從總線上返回[4-5]。
圖6如示為點火控制板基于FSMC接口的控制信號波形,主控板通過FSMC接口輸出數(shù)據(jù)和讀寫控制信號,用示波器測試從電平轉(zhuǎn)換電路ADG3308輸入端測得,兩個連續(xù)的寫控制信號(NWR)從高電平變?yōu)榈碗娖?幅度3.2 V,寬度640 ns。FSMC數(shù)據(jù)總線和地址總線經(jīng)CPLD譯碼后能正確控制AD芯片及繼電器,測得點火回路阻值為6.5 Ω,輸出點火電流1.5 A。
圖6 點火控制裝置FSMC總線測試
本文基于ARM處理器的FSMC接口設(shè)計了一種點火控制裝置,實現(xiàn)了繼電器控制和點火回路阻值采集。主控程序執(zhí)行上位機(jī)指令,采用輪詢機(jī)制完成各個通道的阻值等集,在滿足點火條件下輸出點火電流,FSMC接口開發(fā)不需要操作系統(tǒng)支持,運(yùn)行速度快,便于小型化設(shè)計,是一種高效的嵌入式控制解決方案。