專利名稱:更新微控制器的韌體的方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明是關于一種更新韌體的系統(tǒng)與方法,特別是,關于一 種更新微控制器的韌體的系統(tǒng)與方法。
背景技術:
近年來蓬勃發(fā)展的 3C (Computer, Communication, Consumer-electronics)產(chǎn)品,常常需要使用者更新產(chǎn)品的韌體, 以提升產(chǎn)品的相容性與性能,或是當發(fā)現(xiàn)韌體有錯誤(bug)時, 也需要使用者更新產(chǎn)品的韌體,以修正這些錯誤。此外,對于系 統(tǒng)商來說,買進一顆積體電路(integrated circuit, IC),例如 微控制器(Micro Controller Unit, MCU),雖然IC廠商可能會 提供韌體程式,但是此韌體多為IC廠商作為硬體測試之用,因 此功能與結構尚不完備。如果能讓系統(tǒng)商方便地更新或升級韌 體,將大大地增加IC的價值。微控制器的韌體一般儲存于微控 制器內(nèi)的一晶片內(nèi)(on-chip)程式記憶體,例如一快閃(flash) 記憶體或電性可抹除式唯讀記憶體(EEPR0M)等非揮發(fā)性 (non-volatile)記憶體,但是由于使用年限或成本的問題,因此 發(fā)展出以揮發(fā)性記憶體,如靜態(tài)隨機存取記憶體(SRAM),來構成 晶片內(nèi)程式記憶體。這類型的微控制器在使用上,需于晶片外外 加一程式記憶體,例如一電性可抹除式唯讀記憶體,每當微控制器啟動(power on)時,把此電性可抹除式唯讀記憶體內(nèi)的韌體載 入晶片內(nèi)程式記憶體,以克服上述缺點。一般韌體更新可經(jīng)由微控制器開發(fā)時所預留的二接腳/三接 腳/四接腳,供韌體更新之用,然而這些接腳一般皆為廠商所自 定的規(guī)格,因此更新的動作需由廠商操作,對于使用者來說相當 不方便。此外,可先把韌體下載至主機(host)中,例如電腦主機、 手機…等,再利用通用串列匯流排(Universal Serial Bus, USB) 把儲存在主機的韌體載入微控制器的晶片內(nèi)程式記憶體,以更新 韌體。通用串列匯流排是由Intel、 Compaq、 Digital、 IBM、 Microsoft、 NEC及Northern Telecom等七家公司共同推出的介 面標準,已在市面上被廣為應用,且經(jīng)由通用串列匯流排介面更 新韌體的方式,只需要使用者在主機上下指令,非常簡便。其他介面,例如由飛利浦(Phi 1 ips)公司推出的積體電路間 (Inter Integrated Circuit, I2C or IIC)介面及摩托羅拉 (Motorola)公司推出的串列周邊介面(Serial Peripheral Interface, SPI)也可被用來作更新韌體之用。I2C是一種兩線式的通訊介面,這兩線分別為串列資料線 (Serial Data, SDA)及串列時脈線(Serial Clock, SCL) , SDA 用于資料的輸入/輸出,而SCL則用于產(chǎn)生時脈。12C上所有的 裝置,都是藉由這兩條線連接在一起,且這些裝置依據(jù)需求的不 同,每一個裝置都能在主(master)或從屬(slave)模式下運作。 因此I2C上每個裝置都必須具有一個獨一無二的位址供辨識。更 細部地說明,假設某個裝置為主裝置,其余裝置為從屬裝置,則 主裝置會先對I2C上所有的裝置廣播,并送出想要溝通的從屬裝置的位址,被指定的從屬裝置會送出一回應(acknowledge),且 開始與主裝置連線而進行溝通及資料傳遞,其他的從屬裝置則不 作回應。溝通結束后,回到初始狀態(tài),等待下一次動作。SPI則是一種四線式的通訊介面,其中主出從入(Master Out Slave In, M0SI)、主入從出(Master In Slave Out, MIS0)、串 列時脈(Serial Clock, SCK)三線進行資料傳輸,而從屬選擇線 (Slave Select, SS)則控制裝置的選擇。更細部地說明,主裝置 為時脈提供者,可發(fā)起讀取從屬裝置或寫入從屬裝置的動作。當 介面上存在多個從屬裝置時,若要發(fā)起一傳輸,主裝置將把從屬 裝置的選擇線電位降低,然后分別透過M0SI和MIS0線路啟動數(shù) 據(jù)的發(fā)送或接收。此外,比起I2C, SPI —般可達到更快的傳輸 速度。在柏士半導體(Cypress Semiconductor)公司所推出的微控 制器中,韌體更新是使用如圖1所示的系統(tǒng)。微控制器102的韌 體儲存于晶片內(nèi)程式記憶體108中,且微控制器102的兩個介面: 積體電路間介面112或通用串列匯流排介面114皆可供韌體更新 之用。但因為積體電路間介面非常普遍地被使用,若是積體電路 間介面112被其他用途的積體電路間介面外部裝置126所占滿, 則將無法用來更新韌體,此時只能透過通用串列匯流排介面114 來更新韌體,使用上變得缺乏彈性。因此,有必要提供一種整合上述各介面的系統(tǒng)及方法。發(fā)明內(nèi)容有鑒于上述柏士半導體的韌體更新的缺點,若能再加進摩托羅拉公司的串列周邊介面,則當積體電路間介面被其他裝置占滿時,可運用串列周邊介面更新韌體;反之,當串列周邊介面被其 他裝置占滿時,則可運用積體電路間介面更新韌體,使用上變得 極富彈性。本發(fā)明的主要目的,在于提供一種更新微控制器的韌體的系 統(tǒng),包含 一晶片內(nèi)(on-chip)程式記憶體,用于儲存一韌體、 至少一外部裝置,用于儲存一新韌體、 一韌體載入器(Firmware Loader),具有復數(shù)個介面,此復數(shù)個介面包含 一串列周邊介 面、 一積體電路間介面及一通用串列匯流排介面,其中此韌體載 入器是透過復數(shù)個介面將新韌體載入此晶片內(nèi)程式記憶體,以更 新韌體。對于韌體更新,可增加介面使用上的彈性。本發(fā)明的另一目的,在于提供一種更新微控制器的韌體的方 法,包含提供一晶片內(nèi)程式記憶體于微控制器內(nèi),供儲存一韌 體;測試是否存在一晶片外(off-chip)程式記憶體;當不存在晶 片外程式記憶體時,則偵測一串列周邊介面啟動裝置及一積體電 路間介面啟動裝置中是否至少一介面啟動裝置被致能;當至少一 介面啟動裝置被致能時,則偵測此至少一介面啟動裝置所對應的 一外部裝置是否為一儲存元件;當此外部裝置為一儲存元件時, 則偵測此儲存元件是否儲存一新韌體;當此儲存元件儲存一新韌 體時,將此新韌體載入此晶片內(nèi)程式記憶體,以更新韌體。本發(fā)明的有益效果是提供一種更新微控制器的韌體的系統(tǒng) 及方法,在韌體更新時,可增加介面使用上的彈性。
圖1為柏士半導體公司更新微控制器韌體的系統(tǒng)的方塊圖; 圖2為更新微控制器韌體的系統(tǒng)的具體實施例的方塊圖; 圖3為更新微控制器韌體的方法的具體實施例的流程圖; 圖4為一例供指明儲存元件儲存非韌體; 圖5為一例供指明儲存元件儲存韌體; 圖6為一例針對積體電路間介面212對于EEPROM 226的從 屬位址的定義。圖號說明102,202微控制器108,208晶片內(nèi)程式記憶體112,212積體電路間介面114,214通用串列匯流排介面126,226積體電路間介面外部裝置128,228通用串列匯流排介面外部裝置201外部裝置204韌體載入器206晶片外程式記憶體210串列周邊介面216串列周邊介面啟動裝置218積體電路間介面啟動裝置220通用串列匯流排介面啟動裝置222判斷裝置224串列周邊介面外部裝置302開始304是否存在晶片外程式記憶體 306微控制器開啟時308串列周邊介面啟動裝置或積體電路間介面啟動裝置是否被致能 310串列周邊介面啟動裝置被致能? 312串列周邊介面外部裝置是否為儲存元件 314儲存元件儲存韌體? 316下載韌體到晶片內(nèi)程式記憶體 318積體電路介面啟動裝置是否被致能? 320積體電路介面外部裝置是否為儲存元件? 322儲存元件儲存韌體?324偵測是否一電腦主機請求藉由通用串列匯流排介面下載韌體 326結束具體實施方式
本發(fā)明揭露一種微控制器的韌體更新的系統(tǒng)及方法。為了使 本發(fā)明的敘述更加詳盡與完備,可參照下列描述并配合圖2、圖 3及圖4至圖6。參考圖2,圖2為本發(fā)明更新韌體的一具體實施例的一系統(tǒng)。 此更新韌體的系統(tǒng)200包含位于一微控制器202內(nèi)的一晶片內(nèi)程 式記憶體208和一韌體載入器204,及外部裝置201。晶片內(nèi)程 式記憶體208是用于儲存一韌體,而韌體載入器204具有復數(shù)個介面,包含串列周邊介面210、積體電路間介面212,以及通用 串列匯流排介面214。這三個介面分別與串列周邊介面啟動裝置 216、積體電路間介面啟動裝置218,以及通用串列匯流排介面 啟動裝置220連接,且一旦介面上連接一或多個外部裝置201, 例如串列周邊介面210上連接一快閃(flash)記憶體或電性可抹 除式唯讀記憶體(EEPR0M)224、積體電路間介面212上連接一電 性可抹除式唯讀記憶體226,或通用串列匯流排介面214上連接 一電腦主機228,則對應的介面啟動裝置216、 218或220將被 致能。換句話說,被致能的介面啟動裝置表示對應的介面上存在 一外部裝置224、 226或228。此外部裝置包含串列周邊介面上 的串列周邊介面外部裝置224、積體電路間介面上的積體電路間 外部裝置226,以及通用匯流排介面上的通用匯流排外部裝置 228。需要注意的是,外部裝置201包含各種支援串列周邊介面、 積體電路間介面或通用串列匯流排介面的硬體,例如記憶體之類 的儲存元件、電腦主機或其他電子產(chǎn)品元件。但是即使這些介面 上存在著儲存元件,這些儲存元件也不一定儲存一韌體,而可能 只是儲存一些非韌體的資料。因此,此韌體載入器204還包含一 判斷裝置222,供判定外部裝置201是否為儲存元件,且判定儲 存元件中是否儲存韌體。在判定儲存元件是否儲存韌體方面,于一些具體實施例中, 可設計儲存元件上特定位址的位元,以作為判斷的依據(jù),如圖4 和圖5的設計。圖4為一例供指明儲存元件儲存非韌體;而圖5 為一例供指明儲存元件儲存韌體。若判斷裝置222從存取位址0 讀出3CH及從存取位址1讀出C3H,則判定此儲存元件上儲存韌取位址0讀出5AH及從存取位址1讀出 A5H,則表示此儲存元件上只儲存非韌體的資料,如圖4。此外, 當復數(shù)個介面上的儲存元件224、 226或228皆存有韌體時,判 斷裝置222可用于由復數(shù)個介面選擇其中一介面,并且把這個選 擇的介面上的儲存元件224、 226或228所儲存的韌體載入晶片 內(nèi)程式記憶體208,完成更新韌體的動作。在判定外部裝置201是否為儲存元件方面,因為儲存元件的 大小不一,因此除了判定是否為儲存元件之外,若要存取這些儲 存元件,需要送出不同長度的存取位址。于一些具體實施例中, 例如對于積體電路間介面212,判斷裝置222可傳送一請求到一 從屬位址(slave address)所對應的一元件上,若收到一回應 (acknowledge),則判定存在儲存元件。參考圖6的定義,以更 進一步地說明從屬位址的定義,其中圖6是使用7位元的定址機 制為例,7位元從屬位址中的前4個高位元部分為固定的,并依 裝置本身性質加以分類,例如1010B即代表EEPR0M,而后3個 低位元部分則透過裝置上的位址接腳(address pin)設定,例如 若接腳A2、 Al及A0分別灌入0, 0, 0或1, 1, 1,則從屬位址的低 位元部分便被決定為000B或111B。此外,從屬位址的低位元部 分也可依據(jù)接腳,設計成其他二進位數(shù)值,因此在同一積體電路 間介面212上可以有8個相同形式的裝置。 一般,根據(jù)EEPR0M 的大小通常需要一個、二個或三個位元組(byte)長度的存取位 址,而積體電路間介面212的從屬位址又可依接腳來程式化,因此不同的從屬位址的低位元部分可用來指示不同的存取位址的 長度。例如設計某些從屬位址的低位元部分代表大小不超過256個位元組的EEPROM類型,并定義為A型,其中使用一個位元組 便可完全表示A型EEPR0M的存取位址;而又設計另外某些從屬 位址的低位元部分代表大小超過256個位元組,但不超過64K個 位元組的EEPROM類型,并定義為B型,其中使用二個位元組便 可完全表示B型EEPR0M的存取位址。如圖6的定義,判斷裝置 222可先送出從屬位址為1010000B的一第一請求到積體電路間 外部裝置226上,如果收到一第一回應,則視為A型EEPR0M 226, 若欲讀取A型EEPR0M 226的儲存內(nèi)容,則需送出一個位元組的 存取位址。如果沒收到第一回應,則再送出從屬位址為1010111B 的一第二請求到積體電路間外部裝置226上,如果收到一第二回 應,則視為B型EEPR0M 226,若欲讀取B型EEPR0M 226的儲存 的內(nèi)容,則需送出二個位元組的存取位址。如果仍然沒收到第二 回應,則判定這些積體電路間外部裝置226中不存在EEPR0M。 需要注意的是,以上是以EEPR0M及EEPR0M所對應的從屬位址的 高位元部分1010B為例,且只定義A型和B型EEPR0M,熟習此 技藝人士可知,判斷裝置222可依照上述方法,判定積體電路間 外部裝置226中是否存在其他類型的EEPR0M或其他種類的儲存 元件。在判定外部裝置201是否為儲存元件方面,于另一些具體實 施例中,例如對于串列周邊介面210,因為串列周邊介面比積體 電路間介面多了從屬選擇線(SS),因此判斷裝置222可應用上述 判定儲存元件是否儲存韌體的方式。且如上述,要存取不同大小 的儲存元件,需要不同長度的存取位址,因此于此具體實施例中, 可先送出二個位元組的存取位址到一串列周邊介面外部裝置224上,以讀回此存取位址的儲存的資料。若讀回的資料與事先定義的相符,則判定此串列周邊介面外部裝置224上具有一儲存元 件,若不符合,則再送出三個位元組的存取位址到一串列周邊介 面外部裝置224上,以讀回此存取位址的資料。若讀回的資料符 合事先定義的資料,則判定此串列周邊介面外部裝置224上具有 一儲存元件。若都不符合,則判定串列周邊介面外部裝置224不 存在儲存元件。需要注意的是,上述是以二及三個位元組大小的 儲存元件為例,熟習此技藝人士可知,由上述方法,也可判定其 他大小的儲存元件。需要注意的是上述的判定外部裝置201是否為儲存元件及 判定儲存元件是否儲存韌體的具體實施例中,不符合事先定義規(guī) 格的儲存元件或韌體,將不會進行韌體更新的動作。以圖5為例, 判斷裝置222由特定位址讀取出的位元若非事先定義的3CH即 C3H,則即使實際上儲存的為一韌體,也將被判斷裝置222視為 非韌體。圖2中的晶片外程式記憶體206,是用于擴充晶片內(nèi)程式記 憶體208。例如8051單晶片,除了內(nèi)建的晶片內(nèi)程式記憶體208 有4K位元組之外,可擴充程式記憶體到64K位元組大小,即可 外加60K位元組的晶片外程式記憶體206。當晶片外程式記憶體 206存在時,于本發(fā)明將導致韌體載入器202被禁能。參考圖3,為本發(fā)明更新韌體的一具體實施例的一方法。接 在此方法300的開始302之后的是偵測是否存在晶片外程式記憶 體304,若否,則偵測是否為微控制器開啟時306。若是,則偵 測一串列周邊介面啟動裝置或一積體電路間介面啟動裝置是否被致能308。若是,則偵測是否此串列周邊介面啟動裝置被致能 310。若是,則偵測此串列周邊介面所對應的串列周邊介面外部 裝置是否為一儲存元件312。若是,則偵測此儲存元件是否儲存 一韌體314。若是,下載此韌體到微控制器的一晶片內(nèi)程式記憶 體316。現(xiàn)在回到步驟304,若存在晶片外程式記憶體,則走到 結束326?,F(xiàn)在回到步驟306,若非微控制器開啟時,則走到偵 測是否一電腦主機請求藉由通用串列匯流排介面下載韌體324。 現(xiàn)在回到步驟310、 312及314,若串列周邊介面啟動裝置未被 致能、串列周邊介面對應的外部裝置非儲存元件及儲存元件不儲 存韌體,則走到一積體電路介面啟動裝置是否被致能318。若是, 則偵測與此積體電路介面所對應的積體電路間介面外部裝置是 否為一儲存元件320。若是,則偵測此儲存元件是否儲存一韌體 322。若是,下載此韌體到微控制器的一晶片內(nèi)程式記憶體316。 現(xiàn)在回到步驟318、 320及322,若積體電路介面啟動裝置未被 致能、積體電路介面外部裝置非儲存元件及儲存元件不儲存韌 體,則走到偵測是否一電腦主機請求藉由通用串列匯流排介面下 載韌體324?,F(xiàn)在到步驟324,當偵測到電腦主機的請求時,則 依據(jù)此請求下載韌體到晶片內(nèi)程式記憶體316。在一些具體實施 例中,當完成步驟316之后,可回到步驟324,以等待電腦主機 的下一個請求。任何時刻,只要一電腦主機請求更新韌體,便藉 由通用串列匯流排介面,把事先儲存在電腦主機中的韌體,載入 晶片內(nèi)程式記憶體,如圖3所示的具體實施例。在其他具體實施 例中,當走到步驟316之后,也可以依據(jù)需要,設計回到步驟 326、步驟308或其他步驟。于圖3的具體實施例中,是先偵測串列周邊介面啟動裝置被 致能310,再偵測積體電路間介面啟動裝置被致能318,但是于 其他的具體實施例,本發(fā)明可先偵測積體電路間介面啟動裝置被 致能,再偵測串列周邊介面啟動裝置被致能。以上所述,僅為本發(fā)明的較佳實施例而已,并非用以限定本 發(fā)明的權利保護范圍;凡其它未脫離本發(fā)明所揭示的精神下所完 成的等效改變或修飾,均應包含在本發(fā)明權利要求范圍內(nèi)。
權利要求
1. 一種用于更新一微控制器的一韌體的系統(tǒng),其特征在于,包含一晶片內(nèi)程式記憶體,用于儲存該韌體;一韌體載入器,具有復數(shù)個介面,包含一串列周邊介面、一積體電路間介面及一通用串列匯流排介面;至少一外部裝置,用于儲存一新韌體;其中該韌體載入器是透過該復數(shù)個介面將該新韌體載入該晶片內(nèi)程式記憶體,以更新該韌體。
2、 如權利要求1所述的系統(tǒng),其特征在于,該外部 裝置是與該串列周邊介面溝通。
3、 如權利要求1所述的系統(tǒng),其特征在于,該外部 裝置是與該積體電路間介面溝通。
4、 如權利要求1所述的系統(tǒng),其特征在于,該外部 裝置是位于一電腦主機中,且與該通用串列匯流排介面 溝通。
5、 如權利要求1所述的系統(tǒng),其特征在于,該韌體 載入器更包含復數(shù)個介面啟動裝置,分別與對應的該復數(shù)個介面 連接;一判斷裝置與該復數(shù)個介面啟動裝置連接,供偵測 該外部裝置是否儲存一新韌體,及由復數(shù)個介面扃動裝置中選擇一介面啟動裝置,將該新韌體載入該晶片內(nèi)程 式記憶體。
6、 如權利要求5所述的系統(tǒng),其特征在于,該復數(shù) 個介面啟動裝置包含一串列周邊介面啟動裝置;一積體電路間介面啟動裝置;一通用串列匯流排介面啟動裝置。
7、 如權利要求1所述的系統(tǒng),其特征在于,該微控 制器更包含一晶片外程式記憶體,該晶片外程式記憶體 將導致該韌體載入器被禁能。
8、 一種用于更新一微控制器的一韌體的方法,其特 征在于,包含下列步驟(a) 提供一晶片內(nèi)程式記憶體于該微控制器內(nèi),供儲存該韌體;(b) 測試是否存在一 晶片外程式記憶體;(c) 當該晶片外程式記憶體不存在時,則偵測一串列 周邊介面啟動裝置及一積體電路間介面啟動裝置中是否 至少一介面啟動裝置被致能;(d) 當該至少一介面啟動裝置被致能時,則偵測該至 少一介面啟動裝置所對應的一外部裝置是否為一儲存元 件;(e) 當該外部裝置為一儲存元件時,則偵測該儲存元 件是否儲存一新韌體;(f)當該儲存元件儲存一新韌體時,將該新韌體載入 該晶片內(nèi)程式記憶體,以更新該韌體。
9、 如權利要求8所述的方法,其特征在于,該至少一介面啟動裝置被致能包含該串列周邊介面啟動裝置 被致能,且該積體電路間介面啟動裝置未被致能。
10、 如權利要求8所述的方法,其特征在于,該至 少一介面啟動裝置被致能包含該積體電路間介面啟動 裝置被致能,且該串列周邊介面啟動裝置未被致能。
11、 如權利要求8所述的方法,其特征在于,該至 少一介面啟動裝置被致能包含該串列周邊介面啟動裝 置及該積體電路間介面啟動裝置皆被致能。
12、 如權利要求11所述的方法,其特征在于,步驟 (e)更包含:先偵測該串列周邊介面啟動裝置對應的該外部裝 置是否儲存一新韌體。
13、 如權利要求11所述的方法,其特征在于,步驟 (e)更包含:先偵測該積體電路間介面啟動裝置對應的該外部 裝置是否儲存一新韌體。
14、 如權利要求8所述的方法,其特征在于,步驟 (C)更包含:當該串列周邊介面啟動裝置及該積體電路間介面啟 動裝置皆未被致能時,則偵測是否接收來自一電腦主機的藉由一通用串列匯流排介面更新該韌體的一請求; 當該請求存在時,透過該通用串列匯流排介面將該新韌體載入到該晶片內(nèi)程式記憶體,以更新該韌體。 15、如權利要求8所述的方法,其特征在于,偵測一串列周邊介面啟動裝置及一積體電路間介面啟動裝置 中是否至少一介面啟動裝置被致能的步驟,只在該微控 制器啟動時進行。
全文摘要
本發(fā)明是一種更新微控制器的韌體的系統(tǒng),包含串列周邊介面、積體電路間介面及通用串列匯流排介面,以增加介面使用上的彈性。并且,一種更新微控制器的韌體的方法也被揭露,以彈性地使用各個介面。
文檔編號G06F9/445GK101261585SQ20071008037
公開日2008年9月10日 申請日期2007年3月8日 優(yōu)先權日2007年3月8日
發(fā)明者張翊峰, 魏瑞青 申請人:英屬蓋曼群島商福華先進微電子股份有限公司