女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹

jf_pJlTbmA9 ? 來(lái)源:武漢芯源半導(dǎo)體 ? 作者:武漢芯源半導(dǎo)體 ? 2023-11-09 17:42 ? 次閱讀

一、概述

CW32L083 內(nèi)部集成 2 個(gè) I2C 控制器,能按照設(shè)定的傳輸速率(標(biāo)準(zhǔn),快速,高速)將需要發(fā)送的數(shù)據(jù)按照 I2C 規(guī)范串行發(fā)送到 I2C 總線上,或從總線上接收數(shù)據(jù),并對(duì)通信過(guò)程中的狀態(tài)進(jìn)行檢測(cè),另外還支持多主機(jī)通信中的總線沖突和仲裁處理。

二、主要功能

? 支持主機(jī)發(fā)送 / 接收,從機(jī)發(fā)送 / 接收四種工作模式

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

? 支持標(biāo)準(zhǔn) (100Kbps)/ 快速 (400Kbps)/ 高速 (1Mbps) 三種工作速率

? 支持 7bit 尋址功能

? 支持 3個(gè)從機(jī)地址

? 支持廣播地址

? 支持輸入信號(hào)噪聲過(guò)濾功能

? 支持中斷狀態(tài)查詢功能

1.協(xié)議介紹

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

2.功能框圖

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

wKgZomQ2GqKAZh-xAAGGV44_XJ4988.jpg

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

wKgaomQ2GqKALtozAADlg1I4piY840.jpg

3.I2C中斷

I2C 控制寄存器 I2Cx_CR 的 SI 位域?yàn)橹袛鄻?biāo)志位。當(dāng) I2C 狀態(tài)寄存器 I2Cx_STAT 的 STAT 位域值發(fā)生改變(變成 0xF8 除外)時(shí),I2Cx_CR.SI 標(biāo)志位就會(huì)被置位,同時(shí)產(chǎn)生中斷請(qǐng)求。在用戶 I2C 中斷服務(wù)程序中,應(yīng)查詢 I2C 狀態(tài)寄存器 I2Cx_STAT 的 STAT 位域值獲取 I2C 總線的狀態(tài),以確定中斷產(chǎn)生原因。設(shè)置 I2Cx_CR.SI 為 0 清除該標(biāo)志位。

4.工作模式

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

三、EEPROM(CW24C02AD)

1.功能簡(jiǎn)介

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

2.讀寫時(shí)序

字節(jié)寫操作時(shí)序:起始信號(hào)+器件地址(7bit)+讀寫指示(1bit)+存儲(chǔ)空間地址(8bit)+寫入數(shù)據(jù)(8bit)+停止信號(hào),即可完成指定字節(jié)寫入操作。

wKgZomQ2Gw2AZLzkAABj0zN-tdE419.jpg

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

wKgaomQ2GxuASO6tAACc9-EuvGU005.jpg

隨機(jī)讀操作時(shí)序:起始信號(hào)+器件地址(7bit)+讀寫指示(1bit)+存儲(chǔ)空間地址(8bit)+重復(fù)起始信號(hào)+器件地址(7bit)+讀寫指示(1bit),之后器件會(huì)返回1字節(jié)數(shù)據(jù),主機(jī)收到后發(fā)送停止信號(hào),即可完成指定字節(jié)讀取操作。

wKgaomQ2GqKAGMlKAACmS_kzOVY593.jpg

順序讀操作時(shí)序:和隨機(jī)讀時(shí)序類似,只是在主機(jī)接收到1字節(jié)數(shù)據(jù)后,不發(fā)送停止信號(hào),而是繼續(xù)發(fā)送時(shí)鐘進(jìn)行下一個(gè)字節(jié)數(shù)據(jù)的接收,直到所有所需讀取的數(shù)據(jù)全部讀取,之后再發(fā)送停止信號(hào)。

四、硬件連接

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

wKgZomQ2GqKAZrYsAACJV-4diG4208.jpg

五、實(shí)例演示:MCU采用頁(yè)寫和順序讀操作時(shí)序完成EERPOM的訪問(wèn)。

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

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

2.設(shè)置系統(tǒng)時(shí)鐘

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

3.設(shè)置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內(nèi)部地址
uint8_tu8Addr=0x00;//地址字節(jié)
#defineWRITELEN8//寫數(shù)據(jù)長(zhǎng)度
#defineREADLEN8//讀數(shù)據(jù)長(zhǎng)度
#defineWriteReadCycle35//寫讀次數(shù),每次寫入數(shù)據(jù)為n+i(n為次數(shù),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;//讀取完成標(biāo)志

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

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

7.程序流程

程序完成I2C主設(shè)備配置后,先將u8Senddata數(shù)組中的內(nèi)容寫入到EEPROM的第1頁(yè)(CW24C02每頁(yè)8字節(jié)):發(fā)送START信號(hào)后,I2C模塊會(huì)產(chǎn)生狀態(tài)改變中斷,在中斷服務(wù)程序中根據(jù)不同狀態(tài)值進(jìn)行不同處理,直到完成CW24C02的頁(yè)寫模式所有數(shù)據(jù)字節(jié)以及STOP信號(hào)發(fā)送,發(fā)送完成后置寫操作流程完成標(biāo)志。主循環(huán)中判斷到寫操作流程完成后,啟動(dòng)從EERROM的第1頁(yè)數(shù)據(jù)讀取流程:發(fā)送啟動(dòng)信號(hào)后,I2C模塊會(huì)產(chǎn)生狀態(tài)改變中斷,在中斷服務(wù)程序中根據(jù)不同狀態(tài)值進(jìn)行不同處理,直到完成CW24C02的順序讀模式所有數(shù)據(jù)字節(jié)發(fā)送及讀取,在發(fā)送完STOP信號(hào)后置讀操作流程完成標(biāo)志。主循環(huán)中判斷讀操作流程完成后,初始化u8Senddata數(shù)組內(nèi)容,重復(fù)下一次測(cè)試過(guò)程。完成WriteReadCycle變量設(shè)置的測(cè)試次數(shù)后退出。

來(lái)源:武漢芯源半導(dǎo)體

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6063

    文章

    44915

    瀏覽量

    646870
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1082

    瀏覽量

    83266
  • I2C接口
    +關(guān)注

    關(guān)注

    1

    文章

    134

    瀏覽量

    25883
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹

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

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。 圖:CW32的智能馬桶控制板 CW32單片機(jī)
    發(fā)表于 12-20 10:06

    PIC單片機(jī)讀寫I2C實(shí)例源程序一

    PIC單片機(jī)讀寫I2C實(shí)例源程序一 ; this route is used I2C EESROM write and; read; addressing mode is indir
    發(fā)表于 01-16 11:47 ?2852次閱讀

    I2C總線的單片機(jī)C語(yǔ)言實(shí)現(xiàn)及其應(yīng)用

    I2C總線的單片機(jī)C語(yǔ)言實(shí)現(xiàn)及其應(yīng)用 本文介紹I2C總線的概念、接口特性和傳輸時(shí)序,提出了一
    發(fā)表于 10-17 08:36 ?3117次閱讀
    <b class='flag-5'>I2C</b>總線的<b class='flag-5'>單片機(jī)</b><b class='flag-5'>C</b>語(yǔ)言實(shí)現(xiàn)及其應(yīng)用

    PIC單片機(jī)I2C 24LC02 C讀寫程序

    PIC單片機(jī)I2C 24LC02 C讀寫程序 1   I2C總線特點(diǎn)   
    發(fā)表于 10-30 08:27 ?5461次閱讀

    I2C讀寫EEPROM

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

    MSP430系列單片機(jī)I2C總線方式的EEPROM接口

    本文介紹了MSP430系列單片機(jī)性能,以及如何實(shí)現(xiàn)與I2C總線器件的接口,結(jié)合具體的芯片詳細(xì)地說(shuō)明I2C
    發(fā)表于 04-28 17:18 ?4次下載
    MSP430系列<b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>I2C</b>總線方式的<b class='flag-5'>EEPROM</b><b class='flag-5'>接口</b>

    使用C18編譯器和MSSP模塊進(jìn)行I2C?串行EEPROM與PIC18單片機(jī)接口設(shè)計(jì)

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

    AT89S52單片機(jī)并行端口模擬I2C總線協(xié)議讀寫AT24C04的設(shè)計(jì)

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

    基于MCS-51單片機(jī)I2C總線接口電路的設(shè)計(jì)

    單片機(jī)控制系統(tǒng)中,廣泛使用I2C器件。如果單片機(jī)自帶I2C總線接口,則所有I2C器件對(duì)應(yīng)連接到
    發(fā)表于 10-15 16:13 ?3698次閱讀
    基于MCS-51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>I2C</b>總線<b class='flag-5'>接口</b>電路的設(shè)計(jì)

    使用單片機(jī)實(shí)現(xiàn)I2C接口存儲(chǔ)器AT24C04的讀寫與顯示的C語(yǔ)言實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)I2C接口存儲(chǔ)器AT24C04的讀寫與顯示的
    發(fā)表于 03-31 11:20 ?20次下載

    I2C串行EEPROM與PICmicro單片機(jī)接口設(shè)計(jì)

    I2C串行EEPROM與PICmicro單片機(jī)接口設(shè)計(jì)說(shuō)明。
    發(fā)表于 05-11 10:24 ?7次下載

    STM32學(xué)習(xí)之I2C協(xié)議(讀寫EEPROM

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

    CW32單片機(jī)低電壓檢測(cè)器的使用介紹

    CW32單片機(jī)低電壓檢測(cè)器的使用介紹
    的頭像 發(fā)表于 09-18 10:56 ?1390次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>低電壓檢測(cè)器的使用<b class='flag-5'>介紹</b>

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。圖:CW32的智能馬桶控制板CW32單片機(jī)
    的頭像 發(fā)表于 12-20 10:09 ?854次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>在智能馬桶的應(yīng)用<b class='flag-5'>介紹</b>