IT8528E,該芯片內部集成多個外設模塊,內核為8032,使用8051指令集。
因此這顆 MCU“內核”為51核。
可以簡單地認為這是一個外設資源更豐富的8051單片機,框圖如下:
IT8528相關儲存器主要有三個部分:
iRAM : 8032內部 256Byte 的 RAM,這部分屬于8032內核。
XRAM : 內核外部 4K 的 RAM,這部分在 IT8528 芯片內部。
XROM : 外接 Flash ROM,大小不確定,一般為64K--128K,通過SPI連接。
內部RAM
它屬于8032內核部分,訪問速度快,容量很小。邏輯地址和 SFR 寄存器復用。
低128字節的數據存儲器既可以直接尋址也可以間接尋址。
高128字節RAM與特殊功能寄存器區共用相同的地址范圍,都使用0x80—0xFF地址空間。
地址空間重疊,但是物理上是獨立的,使用時通過不同的尋址方式加以區別。高128字節只能間接尋址,特殊功能寄存器區只可以直接尋址。
低128字節RAM也稱通用RAM區。工作寄存器組從0x00—0x1F共32字節,分為4組每組8個寄存器,標記為R0—R7,他們屬于不同的物理空間。使用寄存器組可以提高運算速度。程序狀態字PSW寄存器中的RS1和RS0組合決定當前使用的寄存器組。
可位尋址從0x20—0x2F共16字節,它既可以向普通字節一樣按字節尋址,也可以按位尋址。按位尋址共128bit,位尋址范圍是0x00—0x7F,這里要注意,看起來它和RAM低128字節尋址范圍一樣,但是二者有著本質的區別。位地址指向一個位,而字節地址指向一個字節,在程序中使用不同的指令區分。
內部RAM采用8bit數據總線尋址范圍256Byte,內部RAM操作指令:MOV。
外部RAM
它雖然位于IT8528內部,但相對于8032內核來說是外部數據存儲器,也稱 XRAM。
--地址空間
內核可以訪問的RAM地址范圍就是地址空間。這個范圍由數據總線決定,8051核對于外部數據存儲器采用16bit數據總線,即他可以訪問的RAM范圍是0—64K。
內核可以訪問的范圍是這個范圍,但是實際中外接RAM的物理大小可能沒有64Kbyte,或者可供用戶程序使用的大小沒有64KByte。
RAM 地址空間有 64K,實際芯片設計中,分別會映射不同的“物理存儲”。
--映射模塊寄存器
IT8528內部眾多外設模塊使用時,每個模塊都需要Data、Status、Control寄存器,這些寄存器映射在特定的RAM地址上,在軟件中定義后即可訪問。
這部分范圍是0x1000—0x3000,實際的物理位置在各模塊內。映射的物理空間,用戶是無法改作他用。
--映射外部存儲器
0x0000—0x0FFF(4K)。這部分空間映射的“物理存儲”是8032的外部數據存儲器XRAM。
該段地址空間,在IT8528中稱之為Scratch RAM,也可以映射外部ROM存儲器。
即內核執行指令,可以從外部ROM取,也可以從外部RAM取。
IT8528內部的4K RAM存儲器,用于存儲臨時變量、全局變量等數據。
如下圖,左邊是64K的邏輯地址空間,右邊是映射的“物理存儲”。
簡單地說,邏輯地址空間是0—64K,物理上可能沒有相應的“物理存儲”與之映射,或者映射的“物理存儲”已經被其他部件作為寄存器使用,用戶程序無法自定義使用。
外部RAM采用16bit數據總線尋址范圍64K,外部RAM的操作指令:MOVX。
外部ROM
外部ROM,也叫外部 SPI Flash,用于存儲程序指令,它通過SPI總線和IT8528相連。對于8032來說,沒有內部ROM,支持外接Flash 。
同樣的,8032內核采用16bit地址總線,16bit 程序計數器,程序指令可尋址范圍是
0—64KByte。也就是說程序地址空間也是0—64KByte。
實際上IT8528支持外接最大 16M 的 Flash,那么這里出現了一個問題,8032內核的地址總線是16bit,無法訪問大于64K的地址。應該如何解決?
對于51內核的 MCU 來說,設計了一種分 BANK的存儲組織方式,以支持大于64K的ROM 存儲器。
對于64K的程序地址空間劃分方法如下:(Flash和 8032 代碼空間的映射)
程序地址空間0x0000—0x7FFF,屬于Common Bank,映射了“物理存儲”,即Flash 的0x0000—0x7FFF區間。
程序地址空間0x8000—0xFFFF,屬于Bank(0—3),四個Bank占用相同的程序地址空間,但是在 Flash中的物理區間不同。
CommonBank+Bank_x 的地址范圍恰好是64K,因此8032在訪問外部地址空間的時候,同一時間只能訪問某一個Bank區間。如果編譯的函數處于其他Bank,當發生跨Bank的函數調用時,就會自動切換Bank。實際上切Bank是Keil編譯器生成的一段代碼完成的。
IT8528切Bank相關的寄存器可以參考其 Datasheet。
通過鏈接文件,可以指定某個函數代碼或者某段數據放在某個指定的Bank內。
外部ROM采用16bit地址總線尋址范圍64K,外部ROM中的數據操作指令:MOVC。
IT8528固件更新原理
由上文可知,IT8528內核執行的每一條指令都是從外部SPI Flash實時讀取的。
當需要更新 SPI Flash時就會出現沖突。
此時可以將 XRAM 存儲器映射至代碼地址空間,如此 8032 內核在取指令時就只會訪問 XRAM,而不是訪問SPI Flash 了。
IT8528內部的 XRAM存儲器(Scratch RAM)一共4K,分別編號0--4,每一塊的大小如下圖所示。
4K的XRAM總是映射到數據空間。當需要時,配置代碼空間映射寄存器使能,XRAM會映射到代碼空間。
也就是同一時間,Scratch SRAM可能既映射到數據空間又映射到代碼空間,映射至數據空間稱之為Scratch RAM,映射至代碼空間稱之為Scratch ROM。
如下圖,每一塊映射至代碼空間的位置由 SCARxH/M/L三個寄存器配置。
如下就是代碼空間映射XRAM和 SPI Flash 的示意圖。
為了兼容設計 IT8528 增加了一個寄存器FBCFG,以便完成一個快速映射。
即快速把 Scratch SRAM-0 映射至代碼空間的 F800--FFFF位置。
有了上述映射關系,就解決了更新SPI Flash和8032取指令沖突的問題。
如下圖,IT8528設計了一個SMFI模塊,以便8032訪問外接SPI Flash。
通過 Host端訪問IT8528外掛的SPI Flash原理如下圖。
更新固件流程
第一步,把更新SPI Flash的控制函數(限制在256個字節)copy至SRAM指定位置。
為何要把更新函數copy至SRAM 0x600位置?
由FBCFG寄存器可知,置位BIT7即可把Scratch SRAM-0映射至 0xF800--0xFFFF。
即把 XRAM 的 0x000--0x800的部分映射至代碼空間的 0xF800--0xFFFF。
因此 XRAM 的 0x600--0x6FF 映射至代碼空間的0xFE00--0xFEFF。
通過鏈接腳本把更新函數強制放置在0xFE00,當調用該函數時取指令位置就是
0xFE00。
由于代碼空間0xFE00--0xFEFF映射了 XRAM 的0x600--0x6FF。
因此只需把更新函數copy至 XRAM 的0x600--0x6FF 即可。
注意:更新函數的代碼不能超過256Byte。
第二步,配置 FBCFG 寄存器,把Scratch SRAM-0 映射至代碼空間。
第三步,跳轉至更新函數中。
第四步,在更新函數中循環處理 6266 或者 686C 接口的數據和指令,控制SMFI模塊訪問 SPI Flash。
上述步驟均由 UEFI 或者 OS 下的 UpdateTool 控制完成。
對于IT8987來說,有內部 Flash。其實對于8032內核來說仍然屬于外部Flash。所謂的內部Flash,只是芯片內部“合封”而已。
另外對于IT557x系列的芯片來說,內部單獨設計了一段存儲空間(大約1K),用于內核8032臨時取指令使用,可以不采用上述 copy 更新函數至 XRAM 的方法。
而是采用DMA方式將更新函數copy至“隱藏存儲空間”,然后轉去執行。
-
芯片
+關注
關注
456文章
50886瀏覽量
424185 -
單片機
+關注
關注
6037文章
44563瀏覽量
635886 -
mcu
+關注
關注
146文章
17171瀏覽量
351440 -
存儲器
+關注
關注
38文章
7494瀏覽量
163916 -
內核
+關注
關注
3文章
1373瀏覽量
40310
發布評論請先 登錄
相關推薦
評論