使用S3C2410 ERASE Nor Flash(39VF1601)

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

使用S3C2410 ERASE Nor Flash(39VF1601)

文章foxlin » 週三 7月 11, 2007 1:49 am

目前我遇到一個 Bootloader程式上的問題,百思不得其解期望有人能幫我解答...

1.目前系統環境是使用S3C2410 ARM9開發平台
2.Nor Flash是選用SST39VF1601(16M =>1M X 16bit)
3.S3C2410 nGCS0接至Nor Flash #CE Pin
4.Nor Flash Address Bus A0~A19分別與S3C2410的ADDR1~ADDR20連接一起
5.我在Bootloader程式中發現有幾行定義Erase方式如下
p.s.我知道要Erase Nor Flash是需要下Command的方式
----------------------------------------------------------
#define ROM_BASE 0x08000000
#define CMD_ADDR0 *((volatile U16 *)(0x5555*2+ROM_BASE))
#define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2+ROM_BASE))

問題:
1.上述define中為何要 將 ROM_BASE設為 0x08000000 ????
2.上述 *2是因為 S3C2410的A1接至Nor Flash A0,所以Address資料需要Shift一位

可否哪為先進幫我指導一下上述問題....感激
foxlin
可愛的小學生
可愛的小學生
 
文章: 21
註冊時間: 週三 7月 11, 2007 1:38 am

文章harlan » 週四 7月 12, 2007 9:05 am

小的個人猜測, 因為剛好有接觸這一塊.

在flash裡面, 有一塊空間是用來存放flash的資訊, 包含廠商資料/flash table.. etc, 一般分為bottom table和top table, 從SST39VF1601的spec上面來看, 他是支援bottom block table, 也就是前面那一塊是存放flash的config information, 底下是 spec.

http://www.sst.com/downloads/datasheet/S71223.pdf
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm

文章foxlin » 週四 7月 12, 2007 9:00 pm

(1)39VF160屬於16Mbits Flash其定址為0x000000~0xffffff,只是他提供0x000000~0x007ffff可為外部CPU開機時提取開機時所需的資訊位址...因為是從低位元開始定義所以是Bottom Boot Block

我想應該與我問題沒有關才對....不過我想是這樣的

S3C2410內部有提供一個記憶體管理 MMU機制,程式透過宣告的方式先訂出一段區間已當作S3C2410與Flash溝通的介面(MMU 虛擬記憶位址)然後透過位址與資料指定來讀取Flash..........以上純屬個人想法....還沒證實與理解
foxlin
可愛的小學生
可愛的小學生
 
文章: 21
註冊時間: 週三 7月 11, 2007 1:38 am

文章giantbicycle » 週四 7月 19, 2007 10:53 am

你好

關於上述兩個問題

小弟有一些想法可以 check 看看

1.上述define中為何要 將 ROM_BASE設為 0x08000000 ????

>> 這部份,可能要參考S3C2410 ARM9開發平台 這個開發平台所給的spec中平台整體的Memory Map ,應該會提供這個資訊 (ROM Base address)

2.上述 *2是因為 S3C2410的A1接至Nor Flash A0,所以Address資料需要Shift一位

>> 這部份要看電路圖的Address Bus,配合flash的定址來推估,有的晶片似乎會將 address bus offset一個bit , 可能是為了某種使用上或計算上方便或特殊晶片控制需求而設計的。

只是小弟的看法,請大家多多討論
giantbicycle
可愛的小學生
可愛的小學生
 
文章: 23
註冊時間: 週六 7月 07, 2007 4:16 pm

文章foxlin » 週五 7月 20, 2007 9:21 am

感謝回覆...
但是我想要知道的概念是

線路是將Nor Flash掛在 nGCS0 位址上(根據S3C2410 定義中nGCS0可定址範圍 0x00000000~ 0x08000000)

但為何Bootlloader程式中 要對Nor Flash下Command時需要加上一個Rom_Base 0x08000000
foxlin
可愛的小學生
可愛的小學生
 
文章: 21
註冊時間: 週三 7月 11, 2007 1:38 am

文章giantbicycle » 週五 7月 20, 2007 12:29 pm

您好

由於手頭上沒有 相關的 spec ,
所不知您說的 nGCS0 接腳的配置如何

如果接好後

CPU 仍須知道Flash controller 之memory map 的 address
才能對 flash 下 command

您的意思是否是下 command 時直接 寫入 address 0x00ㄋ
giantbicycle
可愛的小學生
可愛的小學生
 
文章: 23
註冊時間: 週六 7月 07, 2007 4:16 pm

文章foxlin » 週五 7月 20, 2007 1:31 pm

感謝您幫我回覆~

我在此稍微再詳細描述一下我的問題:

S3C2410 NOR FLASH
A1 A0
A2 A1
. .
. .
. .
A20 A19

NOR FLASH #CE ->接至S3C2410 nGCS0

我的問題是:
(1)根據我線路接法應該是符合S3C2410的Memory Aceess定義
(2)上述S3C2410可對NOR FLASH定址從 0x00_0000 ~ 0x1f_ffff(共2MBits)
(3)在我的Bootloader程式中對Nor Flash Erase 寫法為:(我知道對Nor Flash作動作前需下Command與知道Command格式)

#define ROM_BASE 0x08000000 //華硊笭隅砃善0x08000000
#define CMD_ADDR0 *((volatile U16 *)(0x5555*2+ROM_BASE))
#define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2+ROM_BASE))

void NorFlashErase(void)
{
.
.
CMD_ADDR0 = 0xaaaa; //對Nor Flash Address 0x5555下Data 0xaaaa
CMD_ADDR1 = 0x5555;
CMD_ADDR0 = 0x8080;
CMD_ADDR0 = 0xaaaa;
CMD_ADDR1 = 0x5555;
}

為何對Nor Flash Access時需要加上 ROM_BASE 0x08000000
foxlin
可愛的小學生
可愛的小學生
 
文章: 21
註冊時間: 週三 7月 11, 2007 1:38 am

文章訪客 » 週五 7月 20, 2007 6:02 pm

hi foxlin:

(1) cpu本身看得到所有的MemoryMap,

所以不加上ROM_BASE 0x08000000的話,

cpu怎麼知道它要去access的是正確的位置呢?

(2) 以你所說:nGCS0是接著 CE。剛剛check了一下pdf,

確定CE是chip enable之用途(p. 8.)
(To activate the device when CE# is low.)

跟Memory Access比較無關!
訪客
 

文章foxlin » 週五 7月 20, 2007 6:19 pm

感謝回應:

但是據我所知,S3C2410 Address I/O其實只有A0~A26 (共可定址128MB 0X0000000~0X3FFFFFF)。但是nGCS0~nGCS7應該是由A27~A29三個Bit所加以控制。

其實就以我現在的線路而言,系統使用SRAM / Nor Flash都使用到A0~A26,但是可以藉由nGCS0~nGCS7作不同Device選擇(不同Bank定址)。

同時S3C2410 nGCS0~7在Spec.內有定義不同定義範圍與意義
foxlin
可愛的小學生
可愛的小學生
 
文章: 21
註冊時間: 週三 7月 11, 2007 1:38 am


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客