精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32單片機I2C接口讀寫EEPROM芯片介紹

jf_pJlTbmA9 ? 來源:武漢芯源半導體 ? 作者:武漢芯源半導體 ? 2023-11-09 17:42 ? 次閱讀

一、概述

CW32L083 內部集成 2 個 I2C 控制器,能按照設定的傳輸速率(標準,快速,高速)將需要發送的數據按照 I2C 規范串行發送到 I2C 總線上,或從總線上接收數據,并對通信過程中的狀態進行檢測,另外還支持多主機通信中的總線沖突和仲裁處理。

二、主要功能

? 支持主機發送 / 接收,從機發送 / 接收四種工作模式

? 支持時鐘延展 ( 時鐘同步 ) 和多主機通信沖突仲裁

? 支持標準 (100Kbps)/ 快速 (400Kbps)/ 高速 (1Mbps) 三種工作速率

? 支持 7bit 尋址功能

? 支持 3個從機地址

? 支持廣播地址

? 支持輸入信號噪聲過濾功能

? 支持中斷狀態查詢功能

1.協議介紹

I2C 總線使用兩根信號線(數據線 SDA 和時鐘線 SCL)在設備間傳輸數據。SCL 為單向時鐘線,固定由主機驅動。SDA 為雙向數據線,在數據傳輸過程中由收發兩端分時驅動。I2C 總線上可以連接多個設備,所有設備在沒有進行數據傳輸時都處于空閑狀態(未尋址從機接收模式),任一設備都可以作為主機發送 START 起始信號來開始數據傳輸,在 STOP 停止信號出現在總線上之前,總線一直處于 被占用狀態。I2C 通信采用主從結構,并由主機發起和結束通信。主機通過發送 START 起始信號來發起通信,之后發送 SLA+W/R 共 8bit 數據(其中,SLA 為 7bit 從機地址,W/R 為讀寫位),并在第 9個SCL 時鐘釋放 SDA 總線, 對應的從機在第 9個SCL 時鐘占用 SDA 總線并輸出 ACK 應答信號,完成從機尋址。此后根據主機發送的第 1 字 節的 W/R 位來決定數據通信的發端和收端,發端每發送 1個字節數據,收端必須回應 1個ACK 應答信號。數據傳輸完成后,主機發送 STOP 信號結束本次通信。

2.功能框圖

I2C 模塊主要包括時鐘發生器、輸入濾波器、地址比較器、協議控制邏輯、仲裁和同步邏輯、以及相關寄存器等。

wKgZomQ2GqKAZh-xAAGGV44_XJ4988.jpg

CW32L083 支持用戶靈活選擇 GPIO 作為 I2C 通信引腳,如下表所示:

wKgaomQ2GqKALtozAADlg1I4piY840.jpg

3.I2C中斷

I2C 控制寄存器 I2Cx_CR 的 SI 位域為中斷標志位。當 I2C 狀態寄存器 I2Cx_STAT 的 STAT 位域值發生改變(變成 0xF8 除外)時,I2Cx_CR.SI 標志位就會被置位,同時產生中斷請求。在用戶 I2C 中斷服務程序中,應查詢 I2C 狀態寄存器 I2Cx_STAT 的 STAT 位域值獲取 I2C 總線的狀態,以確定中斷產生原因。設置 I2Cx_CR.SI 為 0 清除該標志位。

4.工作模式

I2C 控制器支持 4 種工作模式:主機發送模式、主機接收模式、從機發送模式、從機接收模式。另外還支持廣播 接收模式,其工作方式和從機接收模式類似。

三、EEPROM(CW24C02AD)

1.功能簡介

CW24C02是一個2Kbit的串行EEPROM存儲芯片,可存儲256個字節數據。芯片內部分為32頁,每頁8字節。工作電壓范圍為1.7V到5.5V,I2C接口時鐘頻率為 1MHz (5V,3V),400 KHz (1.7V)。器件地址為1010 A2 A1 A0,對于我們單板A2 A1 A0引腳全部接GND,故器件地址為1010000,即0x50。器件內部存儲空間地址長度8 bit。

2.讀寫時序

字節寫操作時序:起始信號+器件地址(7bit)+讀寫指示(1bit)+存儲空間地址(8bit)+寫入數據(8bit)+停止信號,即可完成指定字節寫入操作。

wKgZomQ2Gw2AZLzkAABj0zN-tdE419.jpg

頁寫操作時序:起始信號+器件地址(7bit)+讀寫指示(1bit)+存儲空間地址(8bit)+寫入數據(8bit*8)+停止信號,即可完成指定地址(必須是頁起始地址)的頁寫入操作。

wKgaomQ2GxuASO6tAACc9-EuvGU005.jpg

隨機讀操作時序:起始信號+器件地址(7bit)+讀寫指示(1bit)+存儲空間地址(8bit)+重復起始信號+器件地址(7bit)+讀寫指示(1bit),之后器件會返回1字節數據,主機收到后發送停止信號,即可完成指定字節讀取操作。

wKgaomQ2GqKAGMlKAACmS_kzOVY593.jpg

順序讀操作時序:和隨機讀時序類似,只是在主機接收到1字節數據后,不發送停止信號,而是繼續發送時鐘進行下一個字節數據的接收,直到所有所需讀取的數據全部讀取,之后再發送停止信號。

四、硬件連接

如下圖所示,MCU和EEPROM通過I2C總線互連。

wKgZomQ2GqKAZrYsAACJV-4diG4208.jpg

五、實例演示:MCU采用頁寫和順序讀操作時序完成EERPOM的訪問。

1.I2C讀寫EEPROM芯片中斷函數(I2C分為I2C1和I2C2)

voidI2c1EepromReadWriteInterruptFunction(void)
{
u8State=I2C_GetState(CW_I2C1);//I2C:獲取狀態寄存器函數
switch(u8State)
{
case0x08://發送完START信號
I2C_GenerateSTART(CW_I2C1,DISABLE);//發送START信號
I2C_Send7bitAddress(CW_I2C1,I2C_SLAVEADDRESS,0X00);//做主時發送從機地址字節
break;
case0x10://發送完重復起始信號
I2C_GenerateSTART(CW_I2C1,DISABLE);
if(0==SendFlg)
{
I2C_Send7bitAddress(CW_I2C1,I2C_SLAVEADDRESS,0X00);//寫命令
}
else
{
I2C_Send7bitAddress(CW_I2C1,I2C_SLAVEADDRESS,0X01);//讀命令,eeprom隨機讀
}
break;
case0x18://發送完SLA+W/R字節
I2C_GenerateSTART(CW_I2C1,DISABLE);
I2C_SendData(CW_I2C1,u8Addr);//發送訪問EEPROM的目標地址字節
break;
case0x20://發送完SLA+W后從機返回NACK
case0x38://主機在發送SLA+W階段或者發送數據階段丟失仲裁或者主機在發送SLA+R階段或者回應NACK階段丟失仲裁
case0x30://發送完一個數據字節后從機返回NACK
case0x48://發送完SLA+R后從機返回NACK
I2C_GenerateSTOP(CW_I2C1,ENABLE);
I2C_GenerateSTART(CW_I2C1,ENABLE);
break;
case0x58://接收到一個數據字節,且NACK已回復
u8Recdata[u8RecvLen++]=I2C_ReceiveData(CW_I2C1);//所有數據讀取完成,NACK已發送
receivedflag=1;
I2C_GenerateSTOP(CW_I2C1,ENABLE);//發送停止條件
break;
case0x28://發送完1字節數據:發送EEPROM中memory地址也會產生,發送后面的數據也會產生
if(0==SendFlg)
{
if(u8SendLenCR_f.STA=1;//setstart//發送重復START信號,START生成函數改寫后,會導致0X10狀態被略過,故此處不調用函數
I2C_GenerateSTOP(CW_I2C1,DISABLE);
}
break;
case0x40://發送完SLA+R信號,開始接收數據
u8RecvLen=0;
if(READLEN>1)
{
I2C_AcknowledgeConfig(CW_I2C1,ENABLE);//讀取數據超過1個字節才發送ACK
}
break;
case0x50://接收完一字節數據,在接收最后1字節數據之前設置AA=0;
u8Recdata[u8RecvLen++]=I2C_ReceiveData(CW_I2C1);
if(u8RecvLen==READLEN-1)
{
I2C_AcknowledgeConfig(CW_I2C1,DISABLE);;
}
break;
}
I2C_ClearIrq(CW_I2C1);
}

2.設置系統時鐘

voidRCC_Configuration(void)
{
CW_SYSCTRL->APBEN1_f.I2C1=1U;
}

3.設置GPIO口

voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure={0};
CW_SYSCTRL->AHBEN_f.GPIOA=1;
CW_SYSCTRL->AHBEN_f.GPIOB=1;
CW_SYSCTRL->AHBEN_f.GPIOC=1;
CW_SYSCTRL->AHBEN_f.GPIOD=1;
CW_SYSCTRL->AHBEN_f.GPIOE=1;
CW_SYSCTRL->AHBEN_f.GPIOF=1;

PB10_AFx_I2C1SCL();
PB11_AFx_I2C1SDA();
GPIO_InitStructure.Pins=I2C1_SCL_GPIO_PIN|I2C1_SDA_GPIO_PIN;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD;
GPIO_Init(I2C1_SCL_GPIO_PORT, GPIO_InitStructure);
}

4.配置嵌套矢量中斷控制器

voidNVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(I2C1_IRQn);
__enable_irq();
}
voidI2C1_IRQHandler(void)
{
I2c1EepromReadWriteInterruptFunction();
}

5.定義常量

#defineI2C1_SCL_GPIO_PORTCW_GPIOB
#defineI2C1_SCL_GPIO_PINGPIO_PIN_10
#defineI2C1_SDA_GPIO_PORTCW_GPIOB
#defineI2C1_SDA_GPIO_PINGPIO_PIN_11
//EEPROM內部地址
uint8_tu8Addr=0x00;//地址字節
#defineWRITELEN8//寫數據長度
#defineREADLEN8//讀數據長度
#defineWriteReadCycle35//寫讀次數,每次寫入數據為n+i(n為次數,i=0~7)
uint8_tu8Senddata[8]={0x66,0x02,0x03,0x04,0x05,0x60,0x70,0x20};
uint8_tu8Senddata2[8]={0x55,0xAA,0xAA,0x55,0x55,0xAA,0x55,0xAA};
uint8_tu8Recdata[16]={0x00};
uint8_tu8SendLen=0;
uint8_tu8RecvLen=0;
uint8_tSendFlg=0,Comm_flg=0;
uint8_tu8recvflg=0;
uint8_tu8State=0;
uint8_treceivedflag=0;//讀取完成標志

6.主程序:利用I2C接口,采用中斷方式讀寫EEPROM芯片(CW24C02)。

int32_tmain(void)
{
I2C_InitTypeDefI2C_InitStruct={0};
uint16_ttempcnt=0;
RCC_Configuration();//時鐘初始化
GPIO_Configuration();//IO口初始化
//I2C初始化
I2C_InitStruct.I2C_Baud=0x01;//500K=(8000000/(8*(1+1)),波特率計數器配置
I2C_InitStruct.I2C_BaudEn=ENABLE;//波特率計數器使能
I2C_InitStruct.I2C_FLT=DISABLE;//=WriteReadCycle)//測試次數完成,退出
{
break;
}
}
while(1);
}

7.程序流程

程序完成I2C主設備配置后,先將u8Senddata數組中的內容寫入到EEPROM的第1頁(CW24C02每頁8字節):發送START信號后,I2C模塊會產生狀態改變中斷,在中斷服務程序中根據不同狀態值進行不同處理,直到完成CW24C02的頁寫模式所有數據字節以及STOP信號發送,發送完成后置寫操作流程完成標志。主循環中判斷到寫操作流程完成后,啟動從EERROM的第1頁數據讀取流程:發送啟動信號后,I2C模塊會產生狀態改變中斷,在中斷服務程序中根據不同狀態值進行不同處理,直到完成CW24C02的順序讀模式所有數據字節發送及讀取,在發送完STOP信號后置讀操作流程完成標志。主循環中判斷讀操作流程完成后,初始化u8Senddata數組內容,重復下一次測試過程。完成WriteReadCycle變量設置的測試次數后退出。

來源:武漢芯源半導體

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6023

    文章

    44376

    瀏覽量

    628393
  • EEPROM
    +關注

    關注

    9

    文章

    1002

    瀏覽量

    81061
  • I2C接口
    +關注

    關注

    1

    文章

    124

    瀏覽量

    25020
收藏 人收藏

    評論

    相關推薦

    CW32單片機I2C接口讀寫EEPROM芯片介紹

    u8recvflg=0;uint8_t u8State = 0;uint8_t receivedflag = 0; //讀取完成標志6.主程序:利用I2C接口,采用中斷方式讀寫EEPROM
    發表于 04-12 10:45

    CW32單片機在智能馬桶的應用介紹

    和調節。本文將介紹CW32單片機在智能馬桶的詳細應用。 圖:CW32的智能馬桶控制板 CW32單片機
    發表于 12-20 10:06

    PIC單片機讀寫I2C實例源程序一

    PIC單片機讀寫I2C實例源程序一 ; this route is used I2C EESROM write and; read; addressing mode is indir
    發表于 01-16 11:47 ?2696次閱讀

    I2C總線的單片機C語言實現及其應用

    I2C總線的單片機C語言實現及其應用 本文介紹I2C總線的概念、接口特性和傳輸時序,提出了一
    發表于 10-17 08:36 ?2899次閱讀
    <b class='flag-5'>I2C</b>總線的<b class='flag-5'>單片機</b><b class='flag-5'>C</b>語言實現及其應用

    PIC單片機I2C 24LC02 C讀寫程序

    PIC單片機I2C 24LC02 C讀寫程序 1   I2C總線特點   
    發表于 10-30 08:27 ?5325次閱讀

    I2C讀寫EEPROM

    開發板,即可接收STM32串口發送給電腦的調試信息。 【*】 引腳分配 EEPROM(AT24C02): EEPROM芯片I2C
    發表于 12-13 15:12 ?23次下載

    MSP430系列單片機I2C總線方式的EEPROM接口

    本文介紹了MSP430系列單片機性能,以及如何實現與I2C總線器件的接口,結合具體的芯片詳細地說明I2C
    發表于 04-28 17:18 ?4次下載
    MSP430系列<b class='flag-5'>單片機</b>與<b class='flag-5'>I2C</b>總線方式的<b class='flag-5'>EEPROM</b><b class='flag-5'>接口</b>

    使用C18編譯器和MSSP模塊進行I2C?串行EEPROM與PIC18單片機接口設計

    本文主要介紹了使用C18編譯器和MSSP模塊進行I2C?串行EEPROM與PIC18單片機接口
    發表于 06-28 08:25 ?11次下載
    使用<b class='flag-5'>C</b>18編譯器和MSSP模塊進行<b class='flag-5'>I2C</b>?串行<b class='flag-5'>EEPROM</b>與PIC18<b class='flag-5'>單片機</b>的<b class='flag-5'>接口</b>設計

    AT89S52單片機并行端口模擬I2C總線協議讀寫AT24C04的設計

    AT24C04是具有I2C總線接口EEPROM.大小為512*8bit.單片機AT89S52本身不具有
    發表于 08-14 14:34 ?2593次閱讀

    基于MCS-51單片機I2C總線接口電路的設計

    單片機控制系統中,廣泛使用I2C器件。如果單片機自帶I2C總線接口,則所有I2C器件對應連接到
    發表于 10-15 16:13 ?3254次閱讀
    基于MCS-51<b class='flag-5'>單片機</b><b class='flag-5'>I2C</b>總線<b class='flag-5'>接口</b>電路的設計

    使用單片機實現I2C接口存儲器AT24C04的讀寫與顯示的C語言實例

    本文檔的主要內容詳細介紹的是使用單片機實現I2C接口存儲器AT24C04的讀寫與顯示的
    發表于 03-31 11:20 ?16次下載

    I2C串行EEPROM與PICmicro單片機接口設計

    I2C串行EEPROM與PICmicro單片機接口設計說明。
    發表于 05-11 10:24 ?7次下載

    STM32學習之I2C協議(讀寫EEPROM

    關于STM32學習分享第七章 I2C協議(讀寫EEPROM)文章目錄關于STM32學習分享前言二、代碼1.i2c.c2.i2c.h3.main.c總結前言開始!開始!
    發表于 11-30 15:21 ?32次下載
    STM32學習之<b class='flag-5'>I2C</b>協議(<b class='flag-5'>讀寫</b><b class='flag-5'>EEPROM</b>)

    CW32單片機UART波特率設置介紹

    CW32單片機UART波特率設置介紹
    的頭像 發表于 10-24 17:35 ?743次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機</b>UART波特率設置<b class='flag-5'>介紹</b>

    CW32單片機在智能馬桶的應用介紹

    和調節。本文將介紹CW32單片機在智能馬桶的詳細應用。圖:CW32的智能馬桶控制板CW32單片機
    的頭像 發表于 12-20 10:09 ?461次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機</b>在智能馬桶的應用<b class='flag-5'>介紹</b>