【正文】
下次當你需要存儲一些穩(wěn)定數據,例如結構信息或導航地圖,請考慮使用EEPROM。它們需要少量的I/O線,相對較快的讀寫操作,多數在單一5V供電電源下運行。它是開始和結束操作的信號。注意spi_deselect() 和spi_select()指令在此是必需的。這個函數的工作是引起串行EEPROM提交一個之前傳輸過的頁。阻止多余的時鐘信號打擾你的數據! Sermem_WriteDisable ()。 spi_deselect ()。等它變低 } While (spiting (SERMEM_INST_RDSR) amp。 Spinout (SERMEM_INST_RDSR)。Void sermem_StopWrite (void){ // // 升高CS信號,導致存儲器開始它的寫周期 // 然后等待WIP位被清除 // Do { spi_deselect ()。盡管可以更短些,但這將花費5毫秒。該寄存器不僅保持一些你寫時需要的描述數據,它還包括一個稱為WIP的重要bit,意思是“Write In Progress”。狀態(tài)寄存器串行EEPROM的一個重要部分就是狀態(tài)寄存器。這個代碼是為68HC12系列芯片寫的,但是對于68HC11端口實在微不足道。Void sermem_Fill (into address, unsigned char bitewing count)。Void sermem_StopWrite (void)。Void sermem_StartWrite (into address)。Void sermem_StopRead (void)。Void sermem_StartRead (into address)。以下是sermon文件中的功能原型:// 配合 ,定義了一些需要的基本信息// 處理串行EEPROM存儲器// 器件聲明——這是每類芯片需要的變量。為了使用容易,我還定義了一個稱為sermem_ReadBlock()的函數,它能一次執(zhí)行全部操作。然后,你發(fā)出一系列sermem_Read()命令。讀/寫操作工作于相同的基本方式。有一個初始化過程,建立起合適的SPI端口。我把如下資源的鏈接包括在內了。你可以寫一字節(jié)直到一頁,那意味著如果你僅僅想寫單個字節(jié),那沒問題。思路是每次地址跨越一頁,你需要升高CS線以便芯片能將一頁數據寫入存儲器。例如,Atmel 25128使用64字節(jié)的頁。這是你不想丟掉(數據)的關鍵!串行EEPROM允許你以頁模式進行寫操作,那意味著你每次能發(fā)送1頁數據?;贓EPROM的SPI基本操作是拉低CS線,發(fā)送一條命令,像WRITE,接著是地址和數據,然后升高CS線。軟件正如你所見到的,基于EEPROM的SPI配線到SPI端口相對簡單。如果你以一個短周期往這些器件(EEPROM)里寫數據,那將僅僅花費一小時左右來超過一百萬次寫操作。然而,在這里你仍然需要注意,你并不是不斷地給器件寫數據。這是個普通的疏忽,也是錯誤的重要來源!使用壽命串行EEPROM的典型值為每字節(jié)能承受一百萬次寫操作。幸運的是,多數SPI的執(zhí)行,例如68HC11和68HC12的SPI端口,允許你根據時鐘標量來調整SPI端口的時鐘速度。 速度問題多數器件能在傳輸速度超過1兆比特每秒的條件下操作。一套完整的指令及格式可以在你的特殊器件的數據手冊上得到。例如Read/Write,緊接著它的是地址。以下表格是一個簡單的總結。在我的板子上,你僅僅在開關上切斷跟蹤并為控制端口連接到合適的引腳就行了。注意,我已經選擇將WP和HOLD線接為高電平。我在板子上留下了幾個切換開關(在該區(qū)域,跟蹤能被切斷,配線方式不同)它們顯示在示意圖中。接下來示意的圖片展示了連接到板子SPI端口的25xxx串行EEPROM。我提供一個基于68HC912B32微控制器的板子已有一段時間了。其他部分也是有趣的,但是在這篇文章里我將忽略它們。(*表示低電平有效)方塊圖通常,工程師們愛看方塊圖!下面就是你在本文中找到的Microchip 25C640的方塊圖:正如你所看到的,方塊圖里有一些不同的部分。通常接5V。如果你不打算這樣做,就給它接高電平。通過將此線拉低,器件將忽略SCK線,這實際上引起器件掛起它的當前狀態(tài)。每個時鐘周期引起數據寄存器移入和移出1bit7HOLD這個有趣的引腳將器件的狀態(tài)設為“掛起”。6SCK串行時鐘。用SPI的術語,就是Slave In,它應該連接SPI端口的MOSI引腳。其它選擇時,WP被置為高電平。如果在控制寄存器中設置了合適的bit,那么WP引腳在低電平時將禁止任何寫操作。從串行電擦除可編程存儲器輸出的數據在此線上隨時鐘輸出。2SO串行輸出引腳。CS線不僅使能器件,而且作為操作結束的標志。1CS芯片選擇?;A部分這些器件之一具有8個引腳。我還沒有考察其他的廠商,但是可以預見,它們的也同樣(兼容)。顯然,串行電擦除可編程存儲器可以從幾個不同的廠商那里得到。例如,某些器件允許一次寫32字節(jié),而其他的允許一次寫64字節(jié)。所有這些器件在電氣上都是兼容的。它們從128字節(jié)一直到32K字節(jié)不等。所以,對于小數量的軟件開銷和僅僅4個I/O引腳,你可以為自己存儲一些基本數據。它們能以每秒200萬bit的速度輸出數據。由于串行電擦除可編程存儲器每次訪問一個bit,這要付出速度上的代價。正如你能想象到的,這更容易接線,更小巧,而且最大的好處是非常便宜!。其中有1條輸入線,1條輸出線,1條控制線,還需要1條時鐘線。其中有15條地址線,8條輸出線,還有多種控制線。例如,檢驗以下兩個封裝??偩€不見了使用串行電擦除可編程存儲器的最大優(yōu)勢是:配線時僅僅需要CPU的4根信號線來操作。也有1線,2線和3線式串行電擦除可編程存儲器器件,它們以相似的方式工作,但是具有不同的接口邏輯。存在幾種不同形式的串行電擦除可編程存儲器。這里能提供幫助!有幾種形式的存儲器不需要標準地址總線和數據總線配線方式。使用這些微控制器的一個不好的方面是它們缺乏大容量的存儲器。SummarySerial EEPROM provide a great way to store nonvolatile data on a small micro controller project. They require few I/O lines, relatively fast read/write operations, and most operate from a single 5volt power supply. The software routines to drive these parts are not very plex. Next time you need to store some nonvolatile data, such as configuration information or navigation maps, consider serial EEPROM.串行存儲器概述我們中的許多人喜歡使用小型的獨立芯片微控制器。 // Disallow further writes to the EEPROM. Prevents rouge clock signals // From corrupting your data! Sermem_WriteDisable ()。 0x01)。 Spinout (SERMEM_INST_RDSR)。You can find the full source code in and , which are fairly well mented and pretty easy to follow. This code is written for the 68HC12 series of chips, but is really trivial to port to the 68HC11 (an excursive left to the reader!). Another file is called , which is a test program that uses the routines.The Status RegisterAn important part of the serial EEPROM is the status register. I thought it important to point it out that you need to use this register. This register not only holds some