13.IIC-EEPROM(AT24C02)

1.為什么需要EEPROM?

? ? ? ? 在單片機開發中,斷電數據保存是常見的需求。例如,智能家居設備的用戶設置、電子秤的校準參數等都需要在斷電后仍能保留。AT24C02作為一款IIC接口的EEPROM芯片,具備以下優勢:

  • 非易失性存儲:斷電后數據不丟失。
  • 容量適中:256字節(2Kb),適合存儲小規模數據。
  • 接口簡單:僅需兩根信號線(SDA、SCL),節省單片機IO口資源。

2.AT24C02硬件解析

1.芯片特性

  • 工作原理:2.7V~5.5V(兼容51單片機5V供電)。
  • 存儲結構:分32頁,每頁八字節,支持頁寫入模式。
  • 器件地址:高4位固定為1010,低四位由A0~A2引腳電平決定(默認接地地址為0xA0)。

2.硬件連接

?3.IIC協議核心原理

? ? ? ? IIC協議通過時序信號實現數據傳輸,需掌握以下關鍵操作:

1.起始信號與停止信號

????????在通信里,SCL 線高電平時,SDA 線從高到低是起始信號,從低到高是終止信號,都由主機發。起始信號一出現,總線被占用;終止信號發出后,總線恢復空閑。

void I2C_Start(void)
{I2C_SDA=1;I2C_SCL=1;I2C_SDA=0;I2C_SCL=0;
}
void I2C_Stop(void)
{I2C_SDA=0;I2C_SCL=1;I2C_SDA=1;
}

?2.數據有效性規定

????????I2C 總線傳輸數據時,時鐘信號高電平時,數據線數據要保持穩定,僅時鐘信號低電平時,數據線電平狀態才可改變。每次數據傳輸以字節為單位,且傳輸的字節數量不設上限。

void I2C_SendByte(unsigned char Byte)
{unsigned char i;for (i=0;i<8;i++){I2C_SDA=Byte&(0x80>>i);I2C_SCL=1;I2C_SCL=0;}
}
unsigned char I2C_ReceiveByte(void)
{unsigned char i,Byte=0x00;I2C_SDA=1;for(i=0;i<8;i++){I2C_SCL=1;if(I2C_SDA){Byte|=(0x80>>i);}I2C_SCL=0;}return Byte;	
}

3.應答響應

?????????I2C 總線數據傳輸時,發送器件傳完一字節數據后,需緊跟校驗位。此校驗位由接收端控制 SDA 實現,是傳輸響應,分“應答(ACK)”和“非應答(NACK)”。 接收端收到字節數據或地址后,想繼續接收就發“應答(ACK)”低電平脈沖,發送方繼續發數據;想結束則發“非應答(NACK)”高電平脈沖,發送方產生停止信號。 每個字節 8 位,先傳最高位,后隨一位應答位,一幀共 9 位。若從機不對尋址信號應答,將數據線置高,主機發終止信號。從機接收中無法繼續,通過“非應答”通知主機結束。主機接收完最后一字節,用“非應答”結束,從機釋放 SDA 線。起始信號必需,結束和應答信號可選。

void I2C_SendAct(bit ActBit)
{I2C_SDA=ActBit;I2C_SCL=1;I2C_SCL=0;
}
unsigned char I2C_ReceiveAct(void)
{unsigned char ActBit;I2C_SDA=1;I2C_SCL=1;ActBit=I2C_SDA;I2C_SCL=0;return ActBit;
}

4.總線的尋址方式

4.AT24C02介紹

? ? ? ? AT24C02器件地址為7位,高四位固定為1010,低3位由A0/A1/A2信號的電平決定。因為傳輸地址或數據是以字節為單位傳送的,當傳送地址時,器件地址占7位,還有最后一位(最低位R/W)用來選擇讀寫方向,它與地址無關。其格式如下:

?
#define AT24C02_ADDRESS		0xA0?

????????本開發板已經將A0/A1/A2連接到GND,所以器件地址為1010000,即0x50(未計算最低位)。如果要對芯片進行寫操作時,R/W即為0,寫器件地址即為0xA0;如果要對芯片進行讀操作時,R/W即為1,此時讀器件地址為0xA1。開發板上也將WP引腳直接接在GND上,此時芯片允許數據正常讀寫。

? ? ? ? IIC總線時序如下:

1.寫入一個字節

// 向AT24C02指定地址寫入一個字節
void AT24C02_WriteByte(unsigned char WordAddress, unsigned char Data) {I2C_Start();I2C_SendByte(AT24C02_ADDRESS);if (I2C_ReceiveAct()) {// 應答錯誤處理,可根據需求添加更多邏輯return;}I2C_SendByte(WordAddress);if (I2C_ReceiveAct()) {return;}I2C_SendByte(Data);if (I2C_ReceiveAct()) {return;}I2C_Stop();
}
  1. 啟動 I2C 通信 (I2C_Start()):通過?I2C_Start?函數產生 I2C 起始信號,標志著一次新的 I2C 通信開始。
  2. 發送設備地址 (I2C_SendByte(AT24C02_ADDRESS)):將 AT24C02 的設備地址發送到總線上。AT24C02_ADDRESS?是 AT24C02 的 7 位設備地址加上讀寫位(寫操作時讀寫位為 0)。發送完設備地址后,調用?I2C_ReceiveAct?函數檢查 AT24C02 是否返回了應答信號。如果沒有收到應答信號,說明通信可能出現問題,函數直接返回。
  3. 發送存儲地址 (I2C_SendByte(WordAddress)):將想要寫入數據的存儲地址發送到總線上。同樣,發送完后檢查 AT24C02 的應答信號。
  4. 發送要寫入的數據 (I2C_SendByte(Data)):將需要寫入到 AT24C02 中的數據發送到總線上,然后再次檢查應答信號。
  5. 停止 I2C 通信 (I2C_Stop()):通過?I2C_Stop?函數產生 I2C 停止信號,結束本次通信。

2.讀取一個字節

unsigned char AT24C02_ReadByte(unsigned char WordAddress) {unsigned char Data;I2C_Start();I2C_SendByte(AT24C02_ADDRESS);if (I2C_ReceiveAct()) {return 0;  // 應答錯誤,返回0}I2C_SendByte(WordAddress);if (I2C_ReceiveAct()) {return 0;}I2C_Start();I2C_SendByte(AT24C02_ADDRESS | 0x01);if (I2C_ReceiveAct()) {return 0;}Data = I2C_ReceiveByte();I2C_SendAct(1);  // 發送非應答位I2C_Stop();return Data;
}

??????????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71651.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu22.04安裝P104-100一些經驗(非教程)

一、版本&#xff1a; 系統&#xff1a;ubuntu-22.04.5-desktop-amd64.iso Nvidia 驅動&#xff1a;NVIDIA-Linux-x86_64-570.124.04.run。官網下載即可 二、經驗 1、通用教程? 直接關鍵詞搜“ubuntu p104”會有一些教程&#xff0c;比如禁用nouveau等 安裝參考&#xff1a…

TCP7680端口是什么服務

WAF上看到有好多tcp7680端口的訪問信息 于是上網搜索了一下&#xff0c;確認TCP7680端口是Windows系統更新“傳遞優化”功能的服務端口&#xff0c;個人理解應該是Windows利用這個TCP7680端口&#xff0c;直接從內網已經具備更新包的主機上共享下載該升級包&#xff0c;無需從微…

OSI七大模型 --- 發送郵件

我想通過電子郵件發送一張照片給我的朋友。從我開始寫郵件到發送成功&#xff0c;按照這個順序講一下我都經歷了OSI模型的哪一層&#xff0c;對應的層使用了什么樣的協議&#xff1f; 完整流程示例&#xff08;補充物理層細節&#xff09; 假設你通過Wi-Fi發送郵件&#xff1a…

LINUX網絡基礎 [一] - 初識網絡,理解網絡協議

目錄 前言 一. 計算機網絡背景 1.1 發展歷程 1.1.1 獨立模式 1.1.2 網絡互聯 1.1.3 局域網LAN 1.1.4 廣域網WAN 1.2 總結 二. "協議" 2.1 什么是協議 2.2 網絡協議的理解 2.3 網絡協議的分層結構 三. OSI七層模型&#xff08;理論標準&#xff09; …

【LLms】關鍵詞提取

1. 停用詞 在文本處理和信息檢索領域&#xff0c;停用詞&#xff08;Stop Words&#xff09;是指在文本中出現頻率較高&#xff0c;但通常不包含實際語義信息或對語義理解貢獻較小的詞匯。這些詞匯通常是一些常見的功能詞&#xff0c;如冠詞、介詞、連詞、代詞、感嘆詞、助動詞…

1998-2022年各地級市三次產業占比/地級市國內生產總值構成/地級市第一產業占比、第二產業占比、第三產業占比數據(全市)

1998-2022年各地級市三次產業占比/地級市國內生產總值構成/地級市第一產業占比、第二產業占比、第三產業占比數據&#xff08;全市&#xff09; 1、時間&#xff1a;1998-2022年 2、指標&#xff1a;第一產業占比、第二產業占比、第三產業占比 3、來源&#xff1a;城市統計年…

基于STM32的簡易出租車計費設計(Proteus仿真+程序+設計報告+原理圖PCB+講解視頻)

這里寫目錄標題 1.主要功能資料下載鏈接&#xff1a;2.仿真3. 程序4. 原理圖PCB5. 實物圖6. 設計報告7. 下載鏈接 基于STM32的簡易出租車計費設計(Proteus仿真程序設計報告原理圖PCB講解視頻&#xff09; 仿真圖proteus 8.9 程序編譯器&#xff1a;keil 5 編程語言&#xff1…

HAL庫啟動ADC的三個函數的區別

HAL_ADC_Start 應該是啟動ADC轉換的最基本函數。只是啟動一次轉換&#xff0c;然后需要用戶自己去查詢轉換是否完成&#xff0c;或者可能只是單次轉換。比如&#xff0c;當調用這個函數后&#xff0c;ADC開始轉換&#xff0c;但程序需要不斷檢查某個標志位來看轉換是否完成&am…

EXIT原理和使用

要用到的控制器NVIC(中斷總控制器)、EXIT&#xff08;外部中斷控制器&#xff09; (EXIT是NVIC是下屬) GPIO外部中斷簡圖 EXIT的基本概念 EXIT主要特性 EXTI工作原理框圖&#xff08;從輸入線開始看&#xff09; 6個寄存器 EXTI和IO的映射關系 AFIO簡介 EXTI與IO對應關系 如…

經典核密度估計(Kernel Density Estimation):從直覺到數學

經典核密度估計&#xff08;Kernel Density Estimation&#xff09;&#xff1a;從直覺到數學 作為一名在大模型時代進入深度學習領域的研究者&#xff0c;你可能對 Transformer、擴散模型等現代技術駕輕就熟。然而&#xff0c;在閱讀一些生成模型的文獻&#xff08;如 Explic…

Halcon 算子 一維碼檢測識別、項目案例

首先我們要明白碼的識別思路 把窗口全部關閉讀取新的圖片圖像預處理創建條碼模型設置模型參數搜索模型獲取條碼結果顯示條碼結果 圖像預處理和條碼增強 對比度太低&#xff1a; scale_image&#xff08;或使用外部程序scale_image_range&#xff09;,增強圖像的對比度圖像模糊…

vue-cli3+vue2+elementUI+avue升級到vite+vue3+elementPlus+avue總結

上一個新公司接手了一個vue-cli3vue2vue-router3.0elementUI2.15avue2.6的后臺管理項目&#xff0c;因為vue2在2023年底已經不更新維護了&#xff0c;elementUI也只支持到vue2&#xff0c;然后總結了一下vue3的優勢&#xff0c;最后批準升級成為了vitevue3vue-router4.5element…

SpringBoot實戰(三十五)微服務集成OAuth2.0(UAA)

目錄 一、知識回顧1.1 什么是 OAuth2 協議&#xff1f;1.2 OAuth2 的4個角色1.3 OAuth2 的3種令牌1.4 OAuth2 的5種認證方式1.5 OAuth2 內置接口地址 二、UAA介紹2.1 概述2.2 UAA的主要功能2.3 UAA 的應用場景 三、微服務集成3.1 集成示例介紹3.2 集成測試 一、知識回顧 在進行…

紅果短劇安卓+IOS雙端源碼,專業短劇開發公司

給大家拆解一下紅果短劇/河馬短劇&#xff0c;這種看光解鎖視頻&#xff0c;可以掙金幣的短劇APP。給大家分享一個相似的短劇APP源碼&#xff0c;這個系統已接入穿山甲廣告、百度廣告、快手廣告、騰訊廣告等&#xff0c;類似紅果短劇的玩法&#xff0c;可以看劇賺錢&#xff0c…

從0開始的操作系統手搓教程23:構建輸入子系統——實現鍵盤驅動1——熱身驅動

目錄 所以&#xff0c;鍵盤是如何工作的 說一說我們的8042 輸出緩沖區寄存器 狀態寄存器 控制寄存器 動手&#xff01; 注冊中斷 簡單整個鍵盤驅動 Reference ScanCode Table 我們下一步就是準備進一步完善我們系統的交互性。基于這個&#xff0c;我們想到的第一個可以…

百度SEO關鍵詞布局從堆砌到場景化的轉型指南

百度SEO關鍵詞布局&#xff1a;從“堆砌”到“場景化”的轉型指南 引言 在搜索引擎優化&#xff08;SEO&#xff09;領域&#xff0c;關鍵詞布局一直是核心策略之一。然而&#xff0c;隨著搜索引擎算法的不斷升級和用戶需求的多樣化&#xff0c;傳統的“關鍵詞堆砌”策略已經…

Python ? Unix時間戳轉日期或日期轉時間戳工具分享

設計一款Unix時間戳和日期轉換工具&#xff0c;其代碼如下&#xff1a; from datetime import datetimeclass Change_Date_Time(object):def __init__(self, date_strNone, date_numNone):self.date_str date_strself.date_num date_num# 轉時間戳def datetime2timestamp(s…

【目標檢測】【NeuralPS 2023】Gold-YOLO:通過收集與分發機制實現的高效目標檢測器

Gold-YOLO&#xff1a; Efficient Object Detector via Gather-and-Distribute Mechanism Gold-YOLO&#xff1a;通過收集與分發機制實現的高效目標檢測器 0.論文摘要 在過去的幾年中&#xff0c;YOLO系列模型已成為實時目標檢測領域的領先方法。許多研究通過修改架構、增強數…

π0源碼解析——一個模型控制7種機械臂:對開源VLA sota之π0源碼的全面分析,含我司的部分落地實踐

前言 ChatGPT出來后的兩年多&#xff0c;也是我瘋狂寫博的兩年多(年初deepseek更引爆了下)&#xff0c;比如從創業起步時的15年到后來22年之間 每年2-6篇的&#xff0c;干到了23年30篇、24年65篇、25年前兩月18篇&#xff0c;成了我在大模型和具身的原始技術積累 如今一轉眼…

K8s 1.27.1 實戰系列(六)Pod

一、Pod介紹 1、Pod 的定義與核心設計 Pod 是 Kubernetes 的最小調度單元,由一個或多個容器組成,這些容器共享網絡、存儲、進程命名空間等資源,形成緊密協作的應用單元。Pod 的設計靈感來源于“豌豆莢”模型,容器如同豆子,共享同一環境但保持隔離性。其核心設計目標包括…