日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2440内存管理

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2440内存管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

title: 2440內存管理
tags: ARM
date: 2018-10-17 19:08:49
---

2440內存管理

特性

  • 大/小端(通過軟件選擇)

  • 地址空間:每個 Bank 有 128M 字節(總共 1G/8 個 Bank)

  • 除了 BANK0(16/32 位)之外【引導ROM,其總線寬度由硬件接線決定,在第一個 ROM 訪問前決定 BANK0 的總線寬度】,其它全部 BANK 都可編程訪問寬度(8/16/32 位)

  • 所有存儲器 Bank 的訪問周期可編程

  • 外部等待擴展總線周期

  • 支持 SDRAM 自刷新和掉電模式

  • 總共 8 個存儲器 Bank

    • 6 個存儲器 Bank 為 ROM,SRAM 等
    • 其余 2 個存儲器 Bank 為 ROM,SRAM,SDRAM 等
  • 7 個固定的存儲器 Bank 起始地址

  • 1 個可變的存儲器 Bank 起始地址并 Bank 大小可編程

    • bank7,為了與bank6組成雙通道,所以其起始地址是bank6地址的尾地址,bank6=bank7大小

內存地址分配

工作方式

GPIO/門電路接口、協議類接口、內存類接口都屬于CPU的統一編址內存控制器根據不同的地址地址范圍,發出不同的片選引腳.比如當CPU發出的指令的地址范圍處于0x20000000 - 0x28000000,內存控制器就會使nGCS4處于低電平.

對于Nand Flash,在原理圖上它的地址線并沒有連接到CPU,因此它不參與CPU的統一編址。但它的數據線也接到了數據總線上,為了防止干擾,它也有一個片選信號(CE)。當CPU訪問Nand Flash時,Nand Flash控制器才會片選Nand Flash,讓其接收數據總線上的數據。

位寬與基址

位寬分為8/16/32,程序的最小存儲單位為1個字節也就是8位寬.假設地址信號為【An,An-1......A3,A2,A1,A0】

位寬(數據線)地址線
8【An,An-1......A3,A2,A1,A0】
16【An,An-1......A3,A2,A1】
32【An,An-1......A2】

所謂位寬,也就是一個存儲單元存儲了幾個位.比如32位的,也就是一次取值是4字,地址序列為[0,4,8,12]>[0b0000,0000>0b0000,0100>0b0000,1000>0b0000,1100],也就是低2位為0.

基址,也就是片選信號在哪里,基址就在哪里.

尋址范圍

尋址范圍與位寬無關,只與地址線有關.比如接了[A0,A2],那么就能尋址[0,1,4,5]也就是尋址[0--5].如果地址線是[A0--A20],尋址到[0----2^21]也就是2M

引腳描述

  • nWE OUTPUT nWE (Write Enable) indicates that the current bus cycle is a write cycle.
  • nOE OUTPUT nOE (Output Enable) indicates that the current bus cycle is a read cycle.
  • nWAIT INPUT nWAIT requests to prolong a current bus cycle. As long as nWAIT is L, the
    current bus cycle cannot be completed.

內存接口的時序

NorFLASH

開發板使用的NORFLASH是MX29LV160DBTI,2M大小,接在nGCS0,所以基址是0.

Taa 地址信號Taa后數據有效70ns Tce 片選信號后Tce后數據有效70ns Toe 數據在Oe后Toe后有效30ns Toh 數據保持時間0ns Tdf 在Tdf內數據不穩定,也就是不允許訪問其他芯片,30ns一般不需要理會這個,因為再次訪問的時候,還需要時序前面的Taa等,等到穩定的時候,數據已經穩定了 Trc 讀周期時間,最小70ns,也就是速度性能 70ns

為了簡單把地址數據(Addresses),片選信號(CE#),讀信號(OE#),同時發出,然后讓它們都等待70ns(等待信號有效)。對應S3C2440的Nor Flash控制器的讀時序圖,需要讓地址信號A[24:0]、片選信號nGCS、讀信號nOE同時發出,保持Tacc大于等于70ns。然后設置讀之后的那些時序tdf,toh為0[因為下一次使用會又有片選的70ns]

位寬設置

為什么上電就能使用NOR

這里的Tacc默認值是111最大值為14個時鐘,這也是為什么我們不用設置NORFLASH就能開機使用.上電的時候是使用晶振12M,也就是tacc=14*Hclk=1/12M*14=1166ns>70ns

設置寄存器

  • BWSCON中Bank0不需要設置
  • 將HCLK設置為100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此設置Tacc等于101,8個clocks即可。
  • BANKCONn其他位不需要設置,保持0,也就是說將地址、片選、地址同時發出,讀后不保持時間.
void bank0_tacc_set(int val) {BANKCON0 = val << 8;//設置【10:8】 }

測試:燒錄到NOR啟動,實際測了一下使用5個周期都是可以的

SDRAM

內存知識補遺

SDRAM學習筆記(二)

  • P-Bank, 物理位寬,要等同于CPU的數據總線寬度,也是北橋內存總線寬度,適用于SDRAM以及以前產品,在RDRAM中以通道代替
  • SDRAM synchronous Dynamic Random Access Memory 同步動態隨機存儲器
  • SIMM single In-line Memory moudle 單列內存模組
  • DIMM double in-line Memory moudle 雙列內存模組
  • SDRAM 芯片位寬 SDRAM芯片的數據總線
  • 內存顆粒==內存芯片
  • L-bank logic bank ,SDRAM芯片內部的bank,一般4個
  • 內存芯片容量=行*列*L-bank*位寬
  • 引腳
    • Dqn 數據總線
    • An 行列地址線
    • DQM 數據掩碼
    • CAS# 列選中
    • RAS# 行選中
    • CK 時鐘信號
    • CKE 時鐘有效
    • Ban L-bank線
    • WE# 寫有效

使用簡介

首先器件上電----對SDRAM進行初始化(因為內部有邏輯電路部分,狀態機部分)----對SDRAM進行200us的穩定期(參數INIT_PER)----預充電,對所有的L-Bank進行預充電(預充電時間間隔tRP)----8個預先刷新周期(手冊規定至少2個周期來刷新邏輯塊,在設計中一般直接給8個周期,參數REF_PER)----模式寄存器的配置(行選通周期參數tRCD,由于SDRAM內部結構導致更新存儲陣列需要時間---數據輸出延時時間tCL---突發長度BL設置) https://www.cnblogs.com/raymon-tec/p/5147217.html

初始化協商 MSR 模式寄存器

SDRAM 在上電的時候需要BIOS對其初始化設置MSR 模式,也就是協商一些參數,下圖是板載的模式字

  • 操作模式
  • CAS 潛伏期 列地址潛伏期,設置后發送列地址后cas周期后發送數據
  • BT 突發傳輸模式
  • BL 突發長度

尋址

[(允許同時)CS片選,L-bank選擇,行有效]列有效

數據讀

有個參數 CAS Latency,CAS 潛伏期=又被稱為讀取潛伏期(RL,Read Latency),這個在初始化時設定

數據寫

注意參數 twr 回寫時間

突發模式

連續讀取,只需要發送起始列地址,BL在協商的時候規定了

板載SDRAM

JZ2440連接的是EM63A165TS-6G,其規格是16M x 16 bit=32M,兩通道也就是64M

4M word x 16-bit x 4-bank,說明內部4個bank,位寬16

CLK CKE Clock Enable,時鐘使能 BA0,BA1 Bank Activate,Bank選擇 A0-A12 Address Inputs,Row(行)=A0-A12,column= A0-A8 with A10Duringa Precharge command, A10 is sampled to determine if all banks are to be precharged(A10 = HIGH). CS# Chip Select RAS# Row Address Strobe: CAS# Column Address Strobe WE# Write Enable LDQM,UDQM Data Input/Output Mask 掩碼 DQ0-DQ15 Data I/O

地址計算

  • 行=A0~A12,列=A0~A8,16位位寬,一個單元兩個字節,4個Bank,所以1個bank=2^13*2^9*2/1024/1024=8M,4個Bank=32M.

  • 32位尋址,所以要忽略CPU2440的低兩位地址線[0,1]

  • bank線如何確認?總共是雙通道,32位位寬,所以實際上選中一個bank其實是選中了兩個物理的Bank=16M=2^24,所以地址線在[24,25],或者也可以這么理解

    尋址64M,4個片選也就是64/4=16M,16M=2^(20+4),所以0->2^23=16M,其再高1位就是24線了
  • BANK6的起始地址為0x30000000,所以SDRAM的訪問地址為0x30000000~低0x33FFFFFF,共64MB

程序設計

時序參數

板子只用到了Bank6的片選,BANK0--BANK5只需要設置BWSCON和BANKCONx(x為0~5)兩個寄存器;BANK6、BANK7外接SDRAM時,除BWSCON和BANKCONx(x為6、7)外,還要設置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4個寄存器。

void sdram_init(void) {BWSCON = 0x22000000; //選擇sdram,32位寬BANKCON6 = 0x17001; //時間參數BANKCON7 = 0x17001;REFRESH = 0x8404f5; //刷新周期BANKSIZE = 0xb1; //size=64MMRSRB6 = 0x20; //CASMRSRB7 = 0x20; }//測試SDRAM地址 int sdram_test(void) {volatile unsigned char *p = (volatile unsigned char *)0x30000000;int i;// write sdramfor (i = 0; i < 1000; i++)p[i] = 0x55;// read sdramfor (i = 0; i < 1000; i++)if (p[i] != 0x55)return -1;return 0; }

轉載于:https://www.cnblogs.com/zongzi10010/p/10023594.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的2440内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。