STM32 在16位數(shù)據(jù)寬度下的地址問題
在項目中,原來使用的是八根數(shù)據(jù)線,讀取數(shù)據(jù)沒有問題,在后來改用十六根地址線并把數(shù)據(jù)寬度改為十六位之后讀出來的數(shù)據(jù)就很奇怪了,經(jīng)過仔細分析師由于STM32的內(nèi)外地址映射造成的,具體參照STM32技術(shù)參考手冊中文翻譯第十版的327頁,根據(jù)我的理解敘述如下:
塊1存儲區(qū)被劃分為4個NOR/PSRAM區(qū),這四個區(qū)在內(nèi)部地址上是連續(xù)排列的。但是實際上每個區(qū)共用的是同一組地址線與數(shù)據(jù)線,因此需要有內(nèi)外的一個地址映射,因此在STM32中實際上有兩個地址,一個是在內(nèi)部訪問的地址,另外一個是實際地址線輸出的地址。
HADDR[27:0]對應(yīng)的是需要轉(zhuǎn)換到外部存儲器的內(nèi)部AHB地址線,其中HADDR[27:26]位用于選擇四個存儲塊之一。
HADDR[25:0]包含外部存儲器地址。HADDR是字節(jié)地址,而不同的外部存儲器數(shù)據(jù)長度也不一樣,因此在數(shù)據(jù)寬度為8位和16位時映射關(guān)系也不一樣。
在數(shù)據(jù)寬度為8位時HADDR[25:0]與FSMC_A[25:0]對應(yīng)相連,這時候在STM32中訪問的地址和實際地址線產(chǎn)生的地址是一致的。而在16位數(shù)據(jù)寬度時HADDR[25:1]與FSMC_A[24:0]對應(yīng)相連,HADDR[0]未接,這時候?qū)嶋H地址線上給出的地址為需要訪問的偏移地址的一半。
在本系統(tǒng)中由于使用了高精度的16位AD,實際數(shù)據(jù)讀取與處理也都是16位,為了快速訪問STM32采用的就是16位數(shù)據(jù)寬度,因此需要針對兩者的地址進行相應(yīng)的映射。重新計算地址之后問題解決。