標籤:嵌入式 arm
1.儲存控制器介紹
s3c2440中的“儲存管理器”提供了訪問外部裝置所需要的訊號,有如下特性:
1.支援小位元組序、大位元組序(通過軟體選擇)
2.每個BANK為128M,一共有8個BANK,共1G
3.BANK0~BANK5可以支援外接ROM、SRAM等,BANK6~BANK7除可以支援ROM、SRAM外 還支援SDRAM
4.BANK0~BANK7的起始地址是固定的
5.外接SDRAM時,支援自重新整理和省電模式
s3c2440上有ADDR0~ADDR26存取範圍只有128M,如何達到上面的1G,通過對外引出的8跟片選訊號nGCS0-nGCS7,對應於BANK0~BANK7。片選訊號輸出低電平可以選中相應的外接裝置。
2.實驗代碼
本實驗流程:
禁止看門狗—>nand flash中前4k位元組複製到晶片內部SRAM中執行—>通過儲存控制器初始化外接的SDRAM—>複製代碼到SDRAM中—>跳轉到SDRAM中執行。
下面是需要配置儲存控制器的相關寄存器,需要看手冊:
0x22011110, //BWSCON0x00000700, //BANKCON00x00000700, //BANKCON10x00000700, //BANKCON20x00000700, //BANKCON3 0x00000700, //BANKCON40x00000700, //BANKCON50x00018005, //BANKCON60x00018005, //BANKCON70x008C07A3, //REFRESH0x000000B1, //BANKSIZE0x00000030, //MRSRB60x00000030, //MRSRB7
head.S
.equ MEM_CTL_BASE, 0x48000000 //.euq A B 就是A=B 等價於c語言的宏定義.equ SDRAM_BASE, 0x30000000.text.global _start_start:bl disable_watch_dogbl memsetup //設定儲存控制器bl copy_steppingstone_to_sdram //複製代碼到SDRAM中ldr pc, =on_sdram //跳到SDRAM中執行on_sdram:ldr sp, =0x34000000 //設定棧bl mainhalt_loop:b halt_loopdisable_watch_dog:mov r1, #0x53000000mov r2, #0x0str r2, [r1] //關閉看門狗mov pc, lr //返回copy_steppingstone_to_sdram:mov r1, #0x0ldr r2, =SDRAM_BASEmov r3, #4*10241:ldr r4, [r1], #4str r4, [r2], #4cmp r1, r3bne 1b //bne b跳轉 ne是not equal 表示如果不相等,跳到1出繼續執行 注意1不是l。。。mov pc, lrmemsetup:mov r1, #MEM_CTL_BASEadrl r2, mem_cfg_valadd r3, r1, #521:ldr r4, [r2], #4str r4, [r1], #4cmp r1, r3bne 1bmov pc, lr.align 4mem_cfg_val: //儲存控制器中13個寄存器的值.long 0x22011110.long 0x00000700.long 0x00000700 .long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00018005.long 0x00018005.long 0x008C07A3.long 0x000000B1.long 0x00000030.long 0x00000030
Makefile
sdram.bin:head.S led.carm-linux-gcc -c head.S -o head.oarm-linux-gcc -c led.c -o led.oarm-linux-ld -Ttext 0x30000000 head.o led.o -o sdram_elfarm-linux-objcopy -O binary -S sdram_elf sdram.binarm-linux-objdump -D -m arm sdram_elf > sdram.disclean:rm -rf *.o *.bin *.dis *elf
測試時用的led.c,隨意選擇前面文章中的led點燈程式即可。
註:原創文章,轉載請著名出處:http://blog.csdn.net/scottly1/article/details/38960751
【嵌入式Linux+ARM】儲存控制器(操作SDRAM)