在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM8S_010_I2C讀寫EEPROM (硬件方式)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-14 14:54 ? 次閱讀

周末需要休息,也需要做事,像我這種,周末也不忘寫文章分享給你們。目的很簡單,就是讓你們不休息。

開玩笑啦

像我這種人

還是希望你們多學點知識

正所謂學到老,活到老

寫在前面

相信看過前面那篇文章“更加深入理解 I2C總線、協議及應用”的人,對I2C都有一定的了解了。那篇文章是針對I2C使用單片機IO模擬I2C方式實現讀寫操作。

本文將講述硬件I2C讀寫操作,也就是由處理器自身硬件的I2C實現時鐘、數據的傳輸過程。

為方便大家閱讀,本文內容已經整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

STM8硬件I2C知識

STM8S的I2C模塊不僅可以接收和發送數據,還可以在接收時將數據從串行轉換成并行數據,在發送時將數據從并行轉換成串行數據。可以開啟或禁止中斷。接口通過數據引腳(SDA)和時鐘引腳(SCL)連接到I2C總線。允許連接到標準(最高100kHz)或快速(最高400kHz)的I2C總線。

1.I2C的4種模式

● 從設備發送模式

● 從設備接收模式

● 主設備發送模式

● 主設備接收模式

2.I2C的主要特點

● 并行總線/I2C總線協議轉換器

● 多主機功能:該模塊既可做主設備也可做從設備

● I2C主設備功能

─ 產生起始和停止信號

● I2C從設備功能

─ 可編程的 I2C 地址檢測

─ 停止位檢測

● 產生和檢測7位/10位地址和廣播呼叫

● 支持不同的通訊速度

─ 標準速度(最高 100 kHz)

─ 快速(最高 400 kHz)

● 狀態標志:

─ 發送器/接收器模式標志

─ I2C 總線忙標志

─ 主模式時的仲裁失敗

─ 地址/數據傳輸后的應答(ACK)錯誤

─ 檢測到錯誤的起始或停止條件

─ 禁止時鐘展寬功能時數據過載或欠載

● 3種中斷

─ 1 個通訊中斷

─ 1 個出錯中斷

─ 1 個喚醒中斷

● 喚醒功能

─ 從模式下如果檢測到地址匹配可以將 MCU 從低功耗模式中喚醒

● 可選的時鐘展寬功能

3.主模式所要求的操作順序

● 在I2C_FREQR寄存器中設定該模塊的輸入時鐘以產生正確的時序

● 配置時鐘控制寄存器

● 配置上升時間寄存器

● 編程I2C_CR1寄存器啟動外設

● 置I2C_CR1寄存器中的START位為1,產生起始條件

● I2C模塊的輸入時鐘頻率必須至少是:

● 標準模式下為:1MHz

● 快速模式下為:4MHz

軟件工程源代碼

1.關于工程

本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發數據”增加I2C接口修改而來。讀寫EEPROM的方式和之前“模擬I2C讀寫”的方式不一樣。

2.硬件I2C初始化

void I2C_Initializes(void)

{

CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);

I2C_Cmd(ENABLE);

I2C_Init(I2C_SPEED, I2C_SLAVE_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR,

I2C_ADDMODE_7BIT, 16);

}

I2C_SPEED:I2C速度,一般是100K - 400K

I2C_SLAVE_ADDRESS7:從設備地址,作為主設備時,這個地址不起作用。

I2C_DUTYCYCLE_2:快速模式

I2C_ACK_CURR:應答

I2C_ADDMODE_7BIT:設備地址位數

16:輸入時鐘(單位M)

2.EEPROM_WriteByte寫一字節

寫一字節分為5個步驟:

void EEPROM_WriteByte(uint16_t Addr, uint8_t Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.設備地址/寫 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.數據地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr>>8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.寫一字節數據 */

I2C_SendData(Data);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/* 5.停止 */

I2C_GenerateSTOP(ENABLE);

}

3.EEPROM_ReadByte讀一字節

讀一字節比寫一字節多了2個步驟,原因是讀的時候多寫地址到讀數據這個切換過程。

void EEPROM_ReadByte(uint16_t Addr, uint8_t *Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.設備地址/寫 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.數據地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr>>8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.重新開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 5.設備地址/讀 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_RX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

/* 6.讀一字節數據 */

I2C_AcknowledgeConfig(I2C_ACK_NONE);

while(I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY) == RESET);

*Data = I2C_ReceiveData();

/* 7.停止 */

I2C_GenerateSTOP(ENABLE);

}

Ⅳ下載

STM8S資料:

http://pan.baidu.com/s/1o7Tb9Yq

軟件源代碼工程兩版本(STM8S-A10_I2C讀寫EEPROM(硬件)):

http://pan.baidu.com/s/1c2EcRo0

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

    關注

    9

    文章

    1082

    瀏覽量

    83305
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1535

    瀏覽量

    127064
  • STM8S
    +關注

    關注

    16

    文章

    149

    瀏覽量

    31993
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    請問可以將EEPROM和FPGA連接到FX3 I2C線路上嗎?

    我的客戶使用帶有 UVC 32 位配置的 FX3。 他們希望將 EEPROM 和 FPGA 連接到 I2C 線路。 這有什么問題嗎? 因為 EEPROM 是用來啟動的,所以我想檢查一下是否有問題。
    發表于 05-21 06:33

    I2C EEPROM無法從FX3S USB控制器啟動怎么處理?

    在我的設計中,我們使用 USB 控制器 FX3S(CYUSB3035-BZXI)和 I2C EEPROM(M24M02-DRMN6/AT24CM02-SSHM),通過 USB 電纜成功進行刷新,刷新
    發表于 05-20 07:47

    Cyusb3014接一塊I2C eeprom的情況下,A0、A1、A2的地址要設置嗎?

    請問一下,Cyusb3014接一塊I2C eeprom的情況下,A0、A1、A2的地址要設置嗎?我在控制中心以及elf2img中沒有發現設置I2C
    發表于 05-12 07:19

    I2C EEPROM編程失敗的原因?

    我嘗試使用 Cy Control Center 實用程序將固件下載到我的 EVM 中, 第一天,我嘗試了很多次,但都失敗了,比如下面的錯誤, I2C EEPROM 編程失敗。 我搜索了英飛凌社區
    發表于 05-06 07:25

    【RA-Eco-RA4M2開發板評測】I2C讀取EEPROM(二)

    6 I2C讀寫EEPROM 6.1 RA Smart Configurator配置I2C 打開RA Smart Configurator,根據硬件
    發表于 04-28 23:14

    【RA-Eco-RA4M2開發板評測】I2C讀取EEPROM(一)

    的存儲器,常用來存儲一些配置信息,以便系統重新上電的時候加載。 EEPROM 芯片最常用的通訊方式就是 I2C 協議,本文將要講解EEPROM讀寫
    發表于 04-28 23:13

    基于APM32F407如何制作I2C EEPROM(AT24C02型號)的MDK-Keil下載算法

    基于APM32F407如何制作I2C EEPROM(AT24C02型號)的Keil下載算法,這樣在我們下載代碼時可以一鍵把數據燒錄到EEPROM中。
    的頭像 發表于 04-11 11:06 ?1025次閱讀
    基于APM32F407如何制作<b class='flag-5'>I2C</b> <b class='flag-5'>EEPROM</b>(AT24<b class='flag-5'>C</b>02型號)的MDK-Keil下載算法

    全志模塊設備開發之I2C編程基礎介紹

    cpu的通信方式是只需要兩條線路的I2C總線,比如在我們的100ask_imx6UL板子中就有eeprom和AP3216兩個外設,它們在I2C總線中充當的都是
    發表于 12-16 09:45

    EEPROM輕量級的簡易類文件的數據讀寫庫:EEPROMFS

    雖然 EEPROM 相對 Flash 讀寫速度更慢,但 EEPROM 一些獨有特性是 Flash 無法實現的,比如字節讀寫操作。 所以,EEPROM
    的頭像 發表于 11-15 16:31 ?1058次閱讀
    <b class='flag-5'>EEPROM</b>輕量級的簡易類文件的數據<b class='flag-5'>讀寫</b>庫:EEPROMFS

    TAS5727信號輸入( I2C + I2S )正常而沒有發聲是怎么回事?

    ,然后。。。程序。。。 I2S的輸入信號正常,I2C的數據可以來回讀寫,錯誤寄存器讀回來的數據為0x00, 理解為功放IC工作正常的意思,但是聲音一直沒出來,檢查初始化步驟,跟官方文檔給出的流程出入
    發表于 10-31 07:36

    TLV320AIC3263 i2c無法進行通信,通過i2c讀寫函數,讀寫寄存器失敗怎么解決?

    麻煩幫忙分析下以下問題的原因 1、i2c無法進行通信,通過i2c讀寫函數(系統提供),讀寫寄存器失敗: 寫寄存器,返回-5: 讀寄存器:都是251
    發表于 10-28 07:32

    EEPROM讀寫程序詳解

    EEPROM(Electrically Erasable Programmable Read-Only Memory)讀寫程序的詳解涉及多個方面,包括EEPROM的基本工作原理、讀寫
    的頭像 發表于 09-05 12:32 ?4602次閱讀

    使用C2000 I2C模塊連接EEPROM

    電子發燒友網站提供《使用C2000 I2C模塊連接EEPROM.pdf》資料免費下載
    發表于 08-27 09:53 ?0次下載
    使用<b class='flag-5'>C</b>2000 <b class='flag-5'>I2C</b>模塊連接<b class='flag-5'>EEPROM</b>

    eeprom存儲原理、存儲結構及讀寫操作

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,可以在不移除電源的情況下進行讀寫
    的頭像 發表于 08-05 17:03 ?5343次閱讀

    CYUSB3014通過I2C EEPROM啟動時,收到了I2C EEPROM編程失敗的錯誤信息怎么解決?

    我使用的是 CYUSB3014。 在通過 I2C EEPROM 啟動時,我收到了 I2C EEPROM 編程失敗的錯誤信息 當我嘗試使用 RAM 時,編程成功。 PMODE 引腳連接至
    發表于 07-11 06:12
    主站蜘蛛池模板: 国内露脸夫妇交换精品 | bt磁力在线搜索 | 特级一级片 | 欧美三级视频在线播放 | 天天摸天天做天天爽天天弄 | 狠狠干夜夜操 | 六月丁香啪啪 | 4hu四虎永久免在线视 | 天天射天天射天天干 | 男女那啥的视频免费 | 欧美成人久久 | 99在线国产 | 99久久国产免费中文无字幕 | 午夜一级成人 | 乌克兰毛片 | 午夜视频在线观看国产 | 国产精品一区牛牛影视 | 特黄特色| 天天躁日日躁狠狠躁中文字幕老牛 | 岬奈奈美在线 国产一区 | 九九精品免费观看在线 | 久久精品五月天 | 五月婷婷六月丁香激情 | 污夜影院 | 国产h在线观看 | 成人精品综合免费视频 | 日本在线黄色 | h网站免费 | 久久精品波多野结衣 | 免费拍拍视频 | 日本美女中出 | 奇米在线| 五月婷婷丁香 | 日本免费www | 国产亚洲欧美一区 | 六月激情丁香 | 日韩欧美高清色码 | 丁香花五月天婷婷 | 国产清纯白嫩大学生正在播放 | 美女扒开尿囗给男生桶爽 | 免费又爽又黄的禁片1000部 |