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