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