記憶體操作裸板試驗

2021-08-15 08:47:41 字數 1239 閱讀 2954

1、從nor flash啟動時,pc指向nor flash的零位址;從nand flash啟動時,pc指向晶元內部的sram令位址,並在啟動階段,將nand flash前4k程式轉移到片內sram

2、片外sdram的起始位址為0x30000000(s3c2440只有bank6和bank7能接sdram,bank6起始位址為0x30000000),當nand flash內的程式遠大於4k時,需通過前4k程式,將nand flash內程式拷貝到sdram,再將pc指向sdram執行(指向手段採取ldr)。

3、所謂n位元組對齊,就是根據其儲存位址0x***%n==0?,等於零時,可選為儲存位址,不為零時,遞增改變位址,直到等於零位止。n值由有效對齊位確定,有效對齊位時自身對齊位和指定對齊位中較小乙個。對於結構體和類,自身對齊位為其成員最大對齊位,最終結構體或類所佔空間應是自身對齊位的整數倍。

4、arm-linux-ld中-t所指定的鏈結位址只是表明程式理論上應該執行的位址,等價於反編譯後第一列的鏈結位址,但並不等於實際執行位址。當理論與實際相符合時,即進入了主程式

5、s3c2440的sdram晶元k4s561632c使用13根位址線訪問32m記憶體空間實現辦法:儲存塊分為bank0~bank3,行位址13位,列位址9位,復用a0-a12。行列位址構成的位址空間為2^22=4194304=4096k=4m,即行列位址可以在乙個儲存塊上定址4m個儲存單元,每個儲存單元可儲存2個位元組(即16位),故在乙個儲存塊上可以定址8m儲存空間,4個儲存塊即為32m。

6、sdram晶元共占用13根行位址線+9跟列位址線+2根bank選擇線=標號24根s3c2440位址線,實際由於復用埠致用了15根。sdram的a0接s3c的addr2,bank接24、25。原因是:sdram本是16位資料線,而arm是32位處理器,一次性要發出32位資料即4位元組,通常將兩塊16位sdram晶元並列組成32位進行接收,併聯晶元所使用位址為同一位址。由上條可知,sdram乙個位址對應的儲存空間是兩個位元組,當併聯後對應4個位元組,但arm是乙個位址對應乙個位元組,即乙個sdram位址,對應arm的4個位址。

由於arm讀寫資料時,位址格式也剛好是4位元組對齊,即以0x00、0x04、0x08……遞增,對應於sdram的0、1、2……。即arm想得到0x04-7資料時,發出指令0x04,此時訪問sdram的0x01就可以滿足,為了讓arm發出的0x04到sdram中為0x01,即將0x0000 0100變成0x0001,只需在接線時相對arm左移兩個位,即左移兩個口。

觀點二:位址的尾端r0、r1當同時取1時,代表的值等於3,小於arm指令對齊值4的限制,接不接無影響。

11 裸板控制IO

控制器就是相當於乙個介面,這個介面用於與特定用途的硬體模組通訊及資料的互動。gpio表示通用的io介面,這些介面上面可以接不同的硬體模組。gpio口共分成組 gpioa,gpioc,gpiod,gpioe,gpiof,gpiog,gpiol。每組裡面有數個不等的io口。gpio口都是多功能的,可以做...

裸板程式設計遇到的問題

跟著教程學習的過程中,由於太久沒有玩開發板了,之前教程裡講過的內容都忘了,今天將記錄下來 編譯led燈的步驟 1.arm linux gcc march armv5te nostdlib c o led.o led.c o 選項就是輸出檔名,output filename c 選項就是只編譯不鏈結 ...

PCB板潮濕絕緣試驗問題

文章參考 筆者進行產品做潮濕實驗時,拿出來做耐壓測試,在耐壓時看到電流在在逐漸增加,超過實驗指標 通過查詢網路發現有類似的現象 溫度40度相對濕度93 下放置120小時,拿出電源產品進行耐壓測試。在打耐壓時會看到電流逐漸增加,當達到一定電流時擊穿,這時在pcb板上的放電部位會出現一種發白且放電的痕跡...