淺析AM335x GPMC模塊地址區域的劃分–TI–Sitara AM335x系列

我們知道AM335x的GPMC模塊作爲一組並行的外部總線接口,使用的頻率還是挺高的,在這上面可以掛NAND FLASH,NOR FLASH,FPGA,DM9000等等設備。
        使用的方式,從硬件方面來說,GPMC總線上掛的設備共享了數據線、地址線和一些控制線,然後由片選信號控制、使能對應的設備。這裏需要提到一點,不同片選的地址空間配置、時序配置,都是分開的,參考TRM中關於GPMC_CONFIG1_i~GPMC_CONFIG7_i的配置說明,i的取值決定了寫入的地址區間不同,對應的就是不同的片選。
軟件配置上面,時序配置就不贅述了,主要有個問題容易引起大家疑惑,那個地址空間的配置是怎樣的?下面就這個問題,簡要解析一下:
        首先,GPMC是可以對每個片選上的設備進行地址區間的分配,配置起來也非常靈活。舉個例子:對於片選0,我們把地址空間配置爲0x0000_0000~0x0400_0000;對於片選1,地址空間配置成0x0600_0000~0x0A00_0000;這樣完成配置了後,如果往0x0000_0004這個地址裏寫數據,由於它屬於片選0的地址區間,所以這個時候CPU就會去使能片選0(拉低GPMC_CS0n),從而對片選0上的設備進行操作;如果寫的是0x0600_0010地址空間,屬於片選1的,就會去使能片選1(拉低GPMC_CS1n),操作片選1上的設備。通過這種方式,就實現對不同的設備操作。PS:
如果是對未分配的地址空間操作,則沒有片選信號會拉低,操作無效;對於已經分配了的片選地址空間,一定要注意,不要交疊,以免發生衝突。

打開AM335x的TRM,第二章2.1 ARM Cortex-A8 Memory Map中可以看到,對GPMC的外部內存地址分配的空間爲512MB,從0x0000_0000~0x1FFF_FFFF。這個意思就是說,GPMC給所有片選分配的地址空間都必須要在這個區域之內。每個片選的地址分佈,是在GPMC_CONFIG7_i中定義的,可以參考TRM中詳細的示例講解,在這裏時間有限,我就挑重點的說了。
        1. 首先要確定你是GPMC的device是NAND類型的,還是NOR類型的,在GPMC_CONFIG1中有定義,對於位寬的定義、同步、異步操作模式的定義也是在GPMIC_CONFIG1中定義的,不贅述。
        2. 時序,這一點根據你實際的NAND/NOR或者相關手冊定義就好,配置到相應片選信號的GPMC_CONFIG中。
        3.地址,重點!GPMC_CONFIG7中:
        bit[6]明顯是確定當前所在的片選信號是否可用,即爲,當前的片選上是否掛有device需要使用。有就置爲1即可。
        bit[11-8]這個mask address,其實是規劃了當前片選地址空間的大小,注意最小爲16MB。16MB的地址空間的跨度即爲0~0x00FF_FFFF(低24位),所以在規劃基地址的時候,只需要定義最高位即可,因爲低位的地址,低24位都是可以由寫入的地址區間來決定,只有基地址需要我們定義和片選相關聯。

        bit[5-0]是base address,即爲基地址的規劃。上面提到過地址空間的最小規劃爲16MB地址空間跨度最小爲爲0~0x00FF_FFFF,對應的,這個基地址定義了高位上面的地址值(高8位),同時把這個地址與當前的片選相關聯。舉個例子,當前寄存器爲GPMC_CONFIG7_0,當我的基地址規劃爲0x08,大小劃歸成16MB時,也就是說,我規劃的片選0的地址空間爲0x0800_0000
~ 0x08FF_FFF;類似的,當我在寄存器中GPMC_CONFIG7_2的基地址定爲0x0A,大小規劃爲128MB時,地址空間即爲:起始地址:0x0A00_0000,結束地址爲0x0A00_0000+0x08FF_FFFF=0x12FF_FFFF。

        最後強調兩點:1.地址空間的分步,不要重疊;2.地址空間的區域要在0x0000_0000~0x1FFF_FFFF範圍之內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章