【嵌入式Linux+ARM】儲存控制器(操作SDRAM)

來源:互聯網
上載者:User

標籤:嵌入式   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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.