日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 程序員小哈
[導讀]“202007每月一練” 的板子上還有一個24C02芯片沒有寫教程,今天介紹一下24C02這個芯片的驅(qū)動方法。

點擊上方“嵌入式從0到1”,選擇“置頂/星標公眾號

干貨福利,第一時間送達!


202007每月一練”?的板子上還有一個24C02芯片沒有寫教程,今天介紹一下24C02這個芯片的驅(qū)動方法。

有的時候我們在程序中會改變一些參數(shù)的值,我們希望這些參數(shù)可以固化,掉電重啟之后仍舊能夠使用最新的值,這種需求,我們就可以使用E2PROM來實現(xiàn)。

24CXX屬于串行E2PROM, 是基于I2C總線的存儲器件,遵循二線制協(xié)議,I2C總線上可以外掛多個器件,每個器件對應不同的地址,通過地址將不同器件進行分開,保證不同芯片之間數(shù)據(jù)傳輸?shù)莫毩⑿浴?br>由于其具有接口方便,體積小,數(shù)據(jù)掉電不丟失等特點,在儀器儀表及工業(yè)自動化控制中得到大量的應用。

24C02的應用場景:

  • 存儲硬件的默認參數(shù),這樣開機上電之后讀取這些參數(shù),就可以按照默認參數(shù)運行了,比如存儲PID自整定之后的參數(shù);
  • 保存計費、計量的一些應用的余額;
  • 類似血壓計、血糖儀之類保存一定次數(shù)的檢測結(jié)果,實現(xiàn)歷史回溯功能。

24CXX系列E2PROM為I2C總線的掉電存儲數(shù)據(jù)芯片。對于I2C總線的介紹可以參考下面網(wǎng)文:

4位數(shù)碼管顯示模塊驅(qū)動

I2C總線主要注意以下幾點:

  1. 數(shù)據(jù)有效性要求

在輸入數(shù)據(jù)時,當SCL是高電平時,SDA上的信號必須保持不變;只有SCL上的時鐘信號為低電平時,SDA上的信號才能改變。

  1. 數(shù)據(jù)的開始和結(jié)束條件

SDA、SCL默認為高電平,表示總線處于空閑狀態(tài)。

數(shù)據(jù)輸入的開始條件是SCL為高電平時,SDA由高變低;

結(jié)束條件是SCL為高電平時,SDA由低電平變?yōu)楦唠娖?,即SDA出現(xiàn)一個上升沿的跳變,即為終止信號。

  1. I2C的應答信號ACK

數(shù)據(jù)傳輸帶有應答信號ACK,在傳輸數(shù)據(jù)的過程中,在時鐘線SCL的第九個脈沖時,從機芯片內(nèi)部會產(chǎn)生一個應答信號ACK將SDA管腳拉低。

引腳定義


引腳 功能描述
A0-A2 器件地址定義引腳,通過高低電平對應的二進制代表不同的地址
SDA 串行數(shù)據(jù)
SCL 串行時鐘輸入
WP 寫保護,接地:可讀可寫;
接Vcc只讀,即寫保護
GND Ground
Vcc Power Supply

24C02模塊的原理圖

  1. 本文對應實例,CON1跳線短接,24C02的地址為0,故24C02的寫地址為0xA0,讀地址為0xA1。

  2. 24C02,尾數(shù)02代表著內(nèi)部有256*8(2K bits)空間。

  3. 上拉電阻必需有,否則可能無法對24C02進行正確讀寫。

24C02器件操作流程

單字節(jié)寫

單字節(jié)寫流程

在字節(jié)寫模式下,主器件發(fā)送起始命令和從器件地址信息、此時R/W位置0(寫地址)發(fā)給從器件,在從器件產(chǎn)生應答信號后,主器件發(fā)送24C02的地址信息,然后等待從器件返回的另一個應答信號后,再發(fā)送數(shù)據(jù)到24C02,然后再接收一次Ack應答信號后,主芯片產(chǎn)生一個停止信號,從器件收到停止信號后,開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中,24C02不再應答主器件的任何請求,從而完成整個單字節(jié)的寫流程。

注: 當上一個數(shù)據(jù)寫完之后,即發(fā)送停止信號之后,需延時至少10ms以上,才能再發(fā)送下一次寫操作的起始信號。

讀操作

1. 單字節(jié)讀
讀操作允許主器件對24C02的任意字節(jié)進行讀操作。主器件首先通過發(fā)送起始信號、從器件地址和寫操作(寫地址)的標志位0。

在從器件應答之后,主器件發(fā)送目標地址,并等待返回應答信號。

主器件重新發(fā)送起始信號和從器件地址,此時R/W位置1(讀操作,讀數(shù)據(jù)),從器件響應應答信號,然后主器件獲取一個8位數(shù)據(jù)字節(jié),主器件不用發(fā)送應答信號但需要產(chǎn)生一個停止信號,即完成單字節(jié)讀過程。

2. 多字節(jié)連續(xù)讀

在從機給主機發(fā)送完一個8位字節(jié)數(shù)據(jù)后,主器件產(chǎn)生一個應答信號來響應,告訴從機主器件請求更多的數(shù)據(jù),對應每個主機產(chǎn)生的應答信號,從機將發(fā)送一個8位數(shù)據(jù)字節(jié)。當主器件不發(fā)送應答信號而發(fā)送停止位時結(jié)束操作。

如果我們使用如下代碼,讀取大于24C02容量的字節(jié)數(shù)的話,會有什么現(xiàn)象呢?
const u8 TEXT_Buffer[]={"0123456789ABCDEF"};#define SIZE sizeof(TEXT_Buffer)
// 寫入16個字節(jié)數(shù)據(jù)AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);
memset(arrDataTemp, 0, sizeof(arrDataTemp));// 讀取280個字節(jié)的數(shù)據(jù)AT24CXX_Read(0,arrDataTemp,280); // 將讀取到的數(shù)據(jù)串口打印輸出USART_OUT(arrDataTemp,280);

上面代碼執(zhí)行,輸出結(jié)果如下所示:

從上面截圖,我們可以看出來,兩個紅色圈選部分的內(nèi)容是一樣的,即當讀取的字節(jié)數(shù)超過N(對于24C02,N=255),讀取的數(shù)據(jù)指針將返回存儲空間的前面,從頭往后輸出剩余字節(jié)。

出現(xiàn)這樣的原因主要是我們在讀取函數(shù)中,發(fā)送地址的時候,將讀取地址對存儲空間大小取余了,所以又從頭開始輸出剩余字節(jié)了。

IIC_Send_Byte(ReadAddr%256);

紫色的55,就是程序初始化的時候,檢查24C02芯片是否存在時,AT24CXX_Check()函數(shù)中寫入的數(shù)據(jù):

while(AT24CXX_Check())??//檢測24C02是否存在{ printf("24C02 Check Failed!\r\n");  delay_ms(500);  printf("Please Check! \r\n");  delay_ms(500); }

資料獲取

代碼工程中有兩個文件,其中myiic為I2C總線相關(guān)操作函數(shù)所在文件,24cxx為24C02操作函數(shù)所在文件。

微信公眾號后臺回復“24C02”,可以下載本文對應的工程源碼。

注:
代碼工程使用的Keil版本為:V5.20
我用的PCB設計軟件版本為:Altium Designer 14.2

如果沒有特殊說明,軟件環(huán)境都為以上兩個版本。

有問題可以加我微信:?

chengxuyuanxiaoha(程序員小哈的全拼),

我可以拉你進技術(shù)交流群,有問題隨時交流。


傳統(tǒng)美德不能丟,?

偷偷摸摸請點贊,?

明目張膽請在看


免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉