I2C 讀寫 AT24C02

根據AT24C02的 Datasheet 可知AT24C02有2K bit,即256B,分為32頁,每頁8個字節,結合數據手冊和原理圖可以得知,板載AT24C02的讀地址為0xA2,寫地址為0xA3

#define	AT24C02_ADDR_WRITE	0xA2
#define	AT24C02_ADDR_READ	0xA3

  • MSB(Most Significant Bit):即最高有效位,是二進制數中權重最大的位。在一個二進制數里,它位于最左邊,對數值大小的影響最大。例如,在二進制數?1010?中,最左邊的?1?就是 MSB,它代表的權重是?23=8。
  • LSB(Least Significant Bit):也就是最低有效位,是二進制數中權重最小的位。它處于二進制數的最右邊,對數值大小的影響最小。比如在二進制數?1010?中,最右邊的?0?就是 LSB,它代表的權重是?20=1。

圖中展示的是 AT24C02(I2C 接口的 EEPROM 芯片)的 “字節寫” 操作時序,以下是對該時序的詳細解釋:
1. 起始信號(START)
? 作用:主設備通過拉低 SDA 線(在 SCL 為高電平時)發起通信,標志一次 I2C 傳輸的開始。
? 圖示:圖中 “SDA LINE” 波形的第一個跳變,由高變低,觸發起始條件。
2. 設備地址(DEVICE ADDRESS)
? 內容:7 位 AT24C02 設備地址(MSB 先傳輸) + 1 位讀寫控制位(R/W)。寫操作時,R/W = 0。
? 意義:主設備通過發送設備地址,選中總線上的 AT24C02 從設備,告知其即將進行寫操作。
3. 字地址(WORD ADDRESS)
? 內容:8 位地址(MSB 到 LSB 依次傳輸),用于指定 AT24C02 中要寫入數據的存儲單元位置。
? 作用:AT24C02 有 256 字節存儲空間,需通過字地址精準定位目標存儲單元。
4. 數據(DATA)
? 內容:主設備發送的 8 位數據(MSB 先,LSB 后),即實際寫入 AT24C02 的數據內容。
? 傳輸:數據跟隨在字地址之后,按 I2C 協議的字節傳輸格式發送。
5. 應答位(ACK)
? 機制:每傳輸完一個字節(設備地址、字地址、數據),接收方(AT24C02)需在第 9 個時鐘周期拉低 SDA 線,返回 ACK 信號,表示成功接收。
? 圖示:每個字節傳輸后標注的 “ACK”,體現 I2C 通信的應答確認機制。
6. 停止信號(STOP)
? 作用:主設備通過拉高 SDA 線(在 SCL 為高電平時)結束本次通信,釋放 I2C 總線。
? 圖示:圖中最后 SDA 線由低變高的跳變,標志字節寫操作完成。
完整流程總結
主設備先發送起始信號,接著發送含寫控制位的設備地址,等待 AT24C02 應答;再發送字地址(指定存儲位置),再次等待應答;最后發送數據字節,待 AT24C02 應答后,主設備發送停止信號,完成一次字節寫操作。整個過程嚴格遵循 I2C 協議的時序規范,確保數據準確寫入 AT24C02 的指定地址。

看原理圖? ?

擴展板

核心板引腳

STM32Cubemax?

寫入

/*** @brief		AT24C02任意地址寫一個字節數據* @param		addr —— 寫數據的地址(0-255)* @param		dat  —— 存放寫入數據的地址* @retval		成功 —— HAL_OK
*/
uint8_t At24c02_Write_Byte(uint16_t addr, uint8_t* dat)
{return HAL_I2C_Mem_Write(&hi2c1, AT24C02_ADDR_WRITE, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xFFFF);
}

/*** @brief		AT24C02任意地址讀一個字節數據* @param		addr —— 讀數據的地址(0-255)* @param		read_buf —— 存放讀取數據的地址* @retval		成功 —— HAL_OK
*/
uint8_t At24c02_Read_Byte(uint16_t addr, uint8_t* read_buf)
{return HAL_I2C_Mem_Read(&hi2c1, AT24C02_ADDR_READ, addr, I2C_MEMADD_SIZE_8BIT, read_buf, 1, 0xFFFF);
}

測試

    uint8_t write_dat = 0xa5;uint8_t recv_buf = 0;if(HAL_OK == At24c02_Write_Byte(10,&write_dat)){printf("Write ok\n");}else{printf("Write fail\n");}HAL_Delay(50);		//寫一次和讀一次之間需要短暫的延時if(HAL_OK == At24c02_Read_Byte(10,&recv_buf)){printf("Read ok, recv_buf = 0x%02X\n", recv_buf);}else{printf("Read fail\n");}

串口測試?

這款芯片的讀寫比較簡單 只需要配置好相關的協議就可以直接進行讀寫操作

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

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

相關文章

K8S學習之基礎七十四:部署在線書店bookinfo

部署在線書店bookinfo 在線書店-bookinfo 該應用由四個單獨的微服務構成,這個應用模仿在線書店的一個分類,顯示一本書的信息,頁面上會顯示一本書的描述,書籍的細節(ISBN、頁數等),以及關于這本…

Linux 查找文本中控制字符所在的行

參考資料 ASCIIコード表 目錄 一. 業務背景二. 遇到的問題三. 分析3.1 url編碼的前置知識3.2 出現控制字符的transactionid分析3.3 16進制分析 四. 從文本中查找控制字符所在的行五. 控制字符一覽 一. 業務背景 ?在項目中,業務請求對應著下URL http://www.test.…

python將pdf文件轉為圖片,如果pdf文件包含多頁,將轉化的多個圖片通過垂直或者水平合并成一張圖片

要將PDF文件轉換為圖片,并將多頁PDF垂直合并成一張圖片,可以使用PyMuPDF(也稱為fitz)庫來讀取PDF文件,并使用Pillow庫來處理和合并圖片。以下是一個示例代碼,展示了如何實現這個功能: 首先&…

HarmonyOS 基礎組件和基礎布局的介紹

1. HarmonyOS 基礎組件 1.1 Text 文本組件 Text(this.message)//文本內容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字體大小.maxLines(1)// 最大行數.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出顯示....fontColor(Color.Black).…

FrameWork基礎案例解析(四)

文章目錄 單獨拉取framework開機與開機動畫橫屏Android.mk語法單獨編譯SDKmake 忽略warning單獨修改和編譯Camera2單獨編譯Launcher3Android Studio 導入、修改、編譯Settings導入 Android Studio 導入、修改、編譯Launcher3android 開機默認進入指定Launcher植入自己的apk到系…

基于vscode(GDB)調試ros2節點

一、環境準備 必備vscode插件 1)Docker Docker - Visual Studio Marketplace 2)Dev Containers Dev Containers - Visual Studio Marketplace 3)GDB GDB Debug - Visual Studio Marketplace 二、進去docker鏡像 1)docker安…

基于springboot的考研成績查詢系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 這些年隨著Internet的迅速發展,我們國家和世界都已經進入了互聯網大數據時代,計算機網絡已經成為了整個社會以及經濟發展的巨大動能,考研成績查詢管理事務現在已經成為社會關注的重要內容,因此運用互聯網技術來提高考研成績…

C++:算術運算符

程序員Amin 🙈作者簡介:練習時長兩年半,全棧up主 🙉個人主頁:程序員Amin 🙊 P? ?S : 點贊是免費的,卻可以讓寫博客的作者開心好久好久😎 📚系列專欄:Java全…

PyQt6實例_A股日數據維護工具_使用

目錄 前置: 下載預備更新的數據 使用工具更新 用工具下載未復權、前復權、權息數據 在PostgreSQL添加兩個數據表 工具&視頻 前置: 1 本系列將以 “PyQt6實例_A股日數據維護工具” 開頭放置在“PyQt6實例”專欄 2 日數據可在“數據庫”專欄&…

REST 方法

FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…

QT 中的元對象系統(五):QMetaObject::invokeMethod的使用和實現原理

目錄 1.簡介 2.原理概述 3.實現分析 3.1.通過方法名調用方法的實現分析 3.2.通過可調用對象調用方法的實現分析 4.使用場景 5.總結 1.簡介 QMetaObject::invokeMethod 是 Qt 框架中的一個靜態方法,用于在運行時調用對象的成員函數。這個方法提供了一種動態調…

Unity3D開發AI桌面精靈/寵物系列 【三】 語音識別 ASR 技術、語音轉文本多平臺 - 支持科大訊飛、百度等 C# 開發

Unity3D 交互式AI桌面寵物開發系列【三】ASR 語音識別 該系列主要介紹怎么制作AI桌面寵物的流程,我會從項目開始創建初期到最終可以和AI寵物進行交互為止,項目已經開發完成,我會仔細梳理一下流程,分步講解。 這篇文章主要講有關于…

Java 狀態模式 詳解

狀態模式詳解 一、狀態模式概述 狀態模式(State Pattern)是一種行為型設計模式,它允許一個對象在其內部狀態改變時改變它的行為,使對象看起來似乎修改了它的類。 核心特點 狀態封裝:將每個狀態的行為封裝到獨立的類中狀態轉換&#xff1a…

Nginx 配置 HTTPS 與 WSS 完整指南

Nginx 配置 HTTPS 與 WSS 完整指南 本教程將手把手教你如何為網站配置 HTTPS 加密訪問,并通過反向代理實現安全的 WebSocket(WSS)通信。以 https://www.zhegepai.cn 域名為例,完整流程約需 30 分鐘完成。 一、前置準備 1.1 域名…

雙向鏈表的理解

背景 代碼中經常會出現雙向鏈表,對于雙向鏈表的插入和刪除有對應的API函數接口,但直觀的圖表更容易理解,所以本文會對rt-thread內核代碼中提供的雙向鏈表的一些API函數操作進行繪圖,方便后續隨時查看。 代碼塊 rt-thread中提供…

大文件上傳源碼,支持單個大文件與多個大文件

大文件上傳源碼,支持單個大文件與多個大文件 Ⅰ 思路Ⅱ 具體代碼前端--單個大文件前端--多個大文件前端接口后端 Ⅰ 思路 具體思路請參考我之前的文章,這里分享的是上傳流程與源碼 https://blog.csdn.net/sugerfle/article/details/130829022 Ⅱ 具體代碼…

Unity中的靜態合批使用整理

靜態批處理是一種繪制調用批處理方法,它組合不移動的網格以減少繪制調用。它將組合的網格轉換為世界空間,并為它們構建一個共享頂點和索引緩沖區。然后,對于可見網格,Unity 會執行一系列簡單的繪制調用,每個調用之間幾…

【機器學習中的基本術語:特征、樣本、訓練集、測試集、監督/無監督學習】

機器學習基本術語詳解 1. 特征(Feature) 定義:數據的屬性或變量,用于描述樣本的某個方面。作用:模型通過學習特征與目標之間的關系進行預測。示例: 預測房價時,特征可以是 面積、地段、房齡。…

C++學習之路:指針基礎

目錄 指針介紹與基本用法雙重指針函數指針空指針與野指針函數參數的指針傳遞最后 指針一般在C/C語言學習的后期接觸,這樣就導致指針給新手一種高深莫測、難以掌握的刻板印象。但實際上指針的使用很簡單,并且還能夠極大的提高程序的靈活性,幫助…

【服務日志鏈路追蹤】

MDCInheritableThreadLocal和spring cloud sleuth 在微服務架構中,日志鏈路追蹤(Logback Distributed Tracing) 是一個關鍵需求,主要用于跟蹤請求在不同服務間的調用鏈路,便于排查問題。常見的實現方案有兩種&#x…