三、關于單片機中的flash和eeprom
FLASH的全稱是FLASH EEPROM,但跟常規EEPROM的操作方法不同
FLASH 和EEPROM的最大區別是FLASH按扇區操作,EEPROM則按字節操作,二者尋址方法不同,存儲單元的結構也不同,FLASH的電路結構較簡單,同樣容量占芯片面積較小,成本自然比EEPROM低,因而適合用作程序存儲器,EEPROM則更多的用作非易失的數據存儲器。當然用FLASH做數據存儲器也行,但操作比EEPROM麻煩的多,所以更“人性化”的MCU設計會集成FLASH和EEPROM兩種非易失性存儲器,而廉價型設計往往只有 FLASH,早期可電擦寫型MCU則都是EEPRM結構,現在已基本上停產了。
至于那個“總工”說的話如果不是張一刀記錯了的話,那是連基本概念都不對,只能說那個“總工”不但根本不懂芯片設計,就連MCU系統的基本結構都沒掌握。在芯片的內電路中,FLASH和EEPROM不僅電路不同,地址空間也不同,操作方法和指令自然也不同,不論馮諾伊曼結構還是哈佛結構都是這樣。技術上,程序存儲器和非易失數據存儲器都可以只用FALSH結構或EEPROM結構,甚至可以用“變通”的技術手段在程序存儲區模擬“數據存儲區”,但就算如此,概念上二者依然不同,這是基本常識問題。
沒有嚴謹的工作精神,根本無法成為真正的技術高手。
EEPROM:電可擦除可編程只讀存儲器,Flash的操作特性完全符合EEPROM的定義,屬EEPROM無疑,首款Flash推出時其數據手冊上也清楚的標明是EEPROM,現在的多數Flash手冊上也是這么標明的,二者的關系是“白馬”和“馬”。至于為什么業界要區分二者,主要的原因是 Flash EEPROM的操作方法和傳統EEPROM截然不同,次要的原因是為了語言的簡練,非正式文件和口語中Flash EEPROM就簡稱為Flash,這里要強調的是白馬的“白”屬性而非其“馬”屬性以區別Flash和傳統EEPROM。
Flash的特點是結構簡單,同樣工藝和同樣晶元面積下可以得到更高容量且大數據量下的操作速度更快,但缺點是操作過程麻煩,特別是在小數據量反復重寫時,所以在MCU中Flash結構適于不需頻繁改寫的程序存儲器。
在很多應用中,需要頻繁的改寫某些小量數據且需掉電非易失,傳統結構的EEPROM在此非常適合,所以很多MCU內部設計了兩種EEPROM結構,FLASH的和傳統的以期獲得成本和功能的均衡,這極大的方便了使用者。隨著ISP、IAP的流行,特別是在程序存儲地址空間和數據存儲地址空間重疊的MCU系中,現在越來越多的MCU生產商用支持IAP的程序存儲器來模擬EEPROM對應的數據存儲器,這是低成本下實現非易失數據存儲器的一種變通方法。為在商業宣傳上取得和雙EEPROM工藝的“等效”性,不少采用Flash程序存儲器“模擬”(注意,技術概念上并非真正的模擬)EEPROM數據存儲器的廠家紛紛宣稱其產品是帶EEPROM的,嚴格說,這是非常不嚴謹的,但商人有商人的目的和方法,用Flash“模擬”EEPROM可以獲取更大商業利益,所以在事實上,技術概念混淆的始作俑者正是他們。
從成本上講,用Flash“模擬”EEPROM是合算的,反之不會有人干,那么那位“總工”和樓上某網友所說的用EEPROM模擬Flash是怎么回事呢?這可能出在某些程序存儲空間和數據存儲空間連續的MCU上。這類MCU中特別是存儲容量不大的低端MCU依然采用EEPROM作為非易失存儲器,這在成本上反而比采用Flash和傳統EEPROM雙工藝的設計更低,但這種現象僅僅限于小容量前提下。因Flash工藝的流行,現在很多商人和不夠嚴謹的技術人員將程序存儲器稱為Flash,對于那些僅采用傳統EEPROM工藝的MCU而言,他們不求甚解,故而錯誤的將EEPROM程序存儲器稱為“ 模擬Flash”,根本的原因是他們未理解Flash只是一種存儲器結構而非存儲器的用途,錯誤的前提自然導致錯誤的結論。商業上講,用EEPROM模擬 Flash是不會有人真去做的愚蠢行為,這違背商業追求最大利益的原則,技術上也不可行,而對于技術人員而言,尤其是IC業內的“總工”如果再這么講那只能說明他或她要么根本不了解相關技術細節,要么非常不嚴謹,這都不符合“總工”的身份。本質的問題是Flash是一種存儲器類型而非MCU中的程序存儲器,即使MCU的程序存儲器用的是Flash,但其逆命題不成立。
在此寫此文,一方面是要澄清技術概念,另一方面更是不想令錯誤的說法誤人子弟,搞技術也需要嚴謹的科學精神。
28系列是最早的EEPROM,28F則是最早的Flash,甚至Flash一詞是Intel在1980S為推廣其28F系列起的“廣告名”,取其意“快”,僅此而已。當年的Flash不比傳統EEPROM容量更大只是容量起點稍高。至于現在的手冊中有無EEPROM字樣并不重要,非要“較枝”的話,看看內容有無“電可擦除”存儲器的說法,至少我隨手打開SST的Flash手冊上都寫的很清楚,不過這些根本就是無意義的皮毛,典型的白馬非馬論。
至于AVR的地址連續問題是我隨手之誤,應指68HC系列,但即使如此,就算我沒有用過包括AVR在內的任何MCU也跟Flash的性質毫無關系。
四、自制AVR仿真器
自制AVR仿真器用JtagICE仿真Mega16芯片進行開發,開發成功后,才移植到M8/48/88/168上。只要開發時留意一下,移植并不會有困難。
使用貼面IC的效果圖:
?
但使用貼面IC一個不好的地方是,芯片無法拆下來(如果我們要重新燒錄芯片的ROM,能拆下來就方便多了)。所以,這個活動,我們推薦使用DIP40封裝的Mega16. 以下是實物圖:
?
?
網上關于自制Jtag的線路有許多種。根據搜集到的資料,設計出本文介紹的最簡易、制作最容易的 JTAG。RS232接口是用分立件制作,就地取材,簡單可靠.
本線路的J1雙排十針座,既可以做Jtag,又可以做ISP(通過跳針JP1控制)。JP1跳針短路時,J1用作ISP下載,方便更新本Jtag的ROM。J1 跳針開路時, 用作JTAG.
?
如果你有232芯片,可以按以下線路代替上面的分立件RS232部分:

?
燒錄文件:
按以上的硬件制作好PCB后,檢查焊接無誤,就可以進行燒錄了。
燒錄的方法有很多,我(armok)推薦的一個方法是:將M16芯片從JTAG板上拆下來,放到普通的帶ISP口的實驗板,使用SL-ISP1.32 軟件,將本文附錄所帶的將AVR Studio 4.10 Rom 燒錄文件中的flash.rom 及 epprom.rom 直接燒入到Jtag ATmega16 就可以了。

評論