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

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

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

3天內不再提示

雅特力AT32F425 I2C使用指南

0739hhbb ? 來源:AT32 MCU 雅特力科技 ? 作者:AT32 MCU 雅特力科技 ? 2023-06-15 09:50 ? 次閱讀

I2C接口簡介

I2C接口是由數據線SDA和時鐘線SCL構成,在標準模式下通信速度可達到100kHz,快速模式下則可以達到400kHz,增強快速模式可達到1MHz。一幀數據傳輸從開始信號開始,在結束信號后停止,在收到開始信號后總線被認為是繁忙的,當收到結束信號后,總線被認為再次空閑。I2C接口具有主機和從機模式、多主機功能、可編程建立和保持時間、時鐘延展功能、DMA存取數據、支持SMBus 2.0協議等特點。

圖1. I2C框圖

wKgZomSKboCAMZxfAAGIry_g8So892.png

I2C接口通信

主機通信流程

主機通信初始化

主機時鐘初始化

在啟動外設(I2CEN)之前,必須先設置I2Cx_CLKCTRL寄存器的各個位用以配置I2C主時鐘。

DIV[7:0]:I2C時鐘分頻;

SDAD[3:0]:數據保持時間(tHD;DAT)

SCLD[3:0]:數據建立時間(tSU;DAT)

SCLH[7:0]:SCL高電平時間

SCLL[7:0]:SCL低電平時間

該寄存器的配置可以使用Artery_I2C_Timing_Configuration時鐘配置工具計算,見第三章節(jié)。低電平控制:當檢測到SCL總線為低電平時,內部SCLL計數器開始計數,當計數值達到SCLL值時,釋放SCL線,SCL線變?yōu)楦唠娖健?/p>

高電平控制:當檢測到SCL總線為高電平時,內部SCLH計數器開始計數,當計數值達到SCLH值時,拉低SCL線,SCL線變?yōu)榈碗娖剑斣诟唠娖狡陂g,如果被外部總線拉低,那么內部SCLH計數器停止計數,并開始低電平計數,這為時鐘同步提供了條件。

圖2. 主機時鐘的產生

wKgaomSKboCAa5D5AACQth6UiEU139.png

主機通信初始化

在啟動通訊前須先設定I2C_CTRL2寄存器中的幾項參數

設置傳輸字節(jié)數

≤255字節(jié)
配置I2C_CTRL2的RLDEN=0,關閉重載模式
配置I2C_CTRL2的CNT[7:0]=N

>255字節(jié)
配置I2C_CTRL2的RLDEN=1,使能重載模式
配置I2C_CTRL2的CNT[7:0]=255
剩余傳輸字節(jié)數N=N-255

設置傳輸結束模式

ASTOPEN=0:軟件結束模式,當數據傳輸完成后,I2C_STS的TDC標志置1,軟件設置GENSTOP=1或者GENSTART=1,發(fā)送STOP條件或者START條件。

ASTOPEN=1:自動結束模式,當數據傳輸完成后,自動發(fā)送STOP條件。

設置從機地址

設置尋址的從機地址值(I2C_CTRL2的SADDR

設置從機地址模式(I2C_CTRL2的ADDR10)
ADDR10=0:7位地址模式
ADDR10=1:10位地址模式

設置傳輸方向(I2C_CTRL2的DIR)

DIR=0:主機接收數據

DIR=1:主機發(fā)送數據

開始傳輸

設置I2C_CTRL2的GENSTART=1,主機開始在總線上發(fā)送START條件和從機地址。

主機10 bits尋址的特殊時序初始化

在10位地址傳輸模式下,I2C_CTRL2的READH10用于產生特殊時序,當READH10=1時,支持如下傳輸序:主機先發(fā)送數據給從機,然后再從從機讀取數據,傳輸時序圖如下圖所示:

圖3. 10位地址的讀訪問READH10=1

wKgaomSKboCAStXRAACW1TxiqdI922.png

主機在軟件結束模式(ASTOPEN=0)下,發(fā)送數據到從機,當數據發(fā)送完成后設置READH10=1,然后再從從機接收數據。

圖4. 10位地址的讀訪問READH10=0

wKgaomSKboCAaVx_AAB_wYnI9s0631.png

主機通信初始化軟件接口

主機通信初始化所用到的軟件接口通過獨立的函數接口實現,如下:

wKgZomSKboCAN5G8AAC9EEFVMFY047.png

i2c_init函數三個參數分別為:所使用的I2C、數字濾波值和主機時鐘配置值。

i2c_transmit_set 函數用于初始化通信參數,包括:所使用的I2C、從機地址、傳輸字節(jié)數、停止條件產生模式和起始條件產生模式。

i2c_addr10_mode_enable函數用于使能10位地址模式。

i2c_addr10_header_enable函數用于使能10位地址頭讀取時序,即主機發(fā)送完整的10位從機地址讀序列或主機只發(fā)送10位地址的前7位。

主機發(fā)送流程

I2C_TXDT數據寄存器為空,I2C_STS的TDIS=1;

向TXDT數據寄存器寫入數據,數據開始發(fā)送;

重復1、2步驟直到發(fā)送CNT[7:0]個數據;

如果此時I2C_STS的TCRLD=1(重載模式),分為以下兩種情況:

剩余字節(jié)數N>255:向CNT寫入255,N=N-255,TCRLD被自動清0,傳輸繼續(xù);

剩余字節(jié)數N≤255:關閉重載模式(RLDEN=0),向CNT寫入N,TCRLD被自動清0,傳輸繼續(xù)。

結束時序

停止條件產生:

軟件結束模式(ASTOPEN=0):此時I2C_STS的TDC置1,設置GENSTOP=1產生STOP條件;

自動結束模式(ASTOPEN=1):自動產生STOP條件。

等待產生STOP條件,當STOP條件產生時,I2C_STS的STOPF置1,將I2C_CLR的STOPC寫1,清除STOPF標志,傳輸結束。

圖5. I2C主機發(fā)送流程圖

wKgZomSKboCALjo4AAOLe4drT6w137.png

圖6. I2C主機發(fā)送時序圖

wKgZomSKboGAeBTjAADW2oigjEc212.png

主機發(fā)送流程軟件接口

主機發(fā)送通過獨立的函數接口實現,如下:

wKgZomSKboGAZ654AAAnMDrBxSc518.png

i2c_master_transmit函數為i2c_application.c文件所提供的應用層接口函數,參數包括:I2C結構體指針、從機地址、發(fā)送數據指針、發(fā)送數據字節(jié)數和函數超時時間。

注:此函數為Artery所提供的標準主機發(fā)送函數。用戶也可根據前述主機發(fā)送流程,自行編寫主機發(fā)送函數。

主機接收流程

當收到數據后,RDBF=1,讀取RXDT數據寄存器,RDBF被自動清零;

重復步驟2直到接收CNT[7:0]個數據;

如果此時I2C_STS的TCRLD=1(重載模式),分為以下兩種情況:

剩余字節(jié)數N>255:向CNT寫入255,N=N-255,TCRLD被自動清0,傳輸繼續(xù);

剩余字節(jié)數N≤255:關閉重載模式(RLDEN=0),向CNT寫入N,TCRLD被自動清0,傳輸繼續(xù)。

當在接收到最后一個字節(jié)時,主機會自動發(fā)送一個NACK。

結束時序

停止條件產生:

軟件結束模式(ASTOPEN=0):此時I2C_STS的TDC置1,設置GENSTOP=1產生STOP條件;

自動結束模式(ASTOPEN=1):自動產生STOP條件。

等待產生STOP條件,當STOP條件產生時,I2C_STS的STOPF置1,將I2C_CLR的STOPC寫1,清除STOPF標志,傳輸結束。

圖7. I2C主機接收流程圖

wKgaomSKboGAT06IAALb1NK2scU535.png

圖8. I2C主機接收時序圖

wKgZomSKboGADvLAAADJ5S95kuo381.png

主機接收流程軟件接口

主機接收通過獨立的函數接口實現,如下:

wKgaomSKboGAKQULAAAoPl258-w317.png

i2c_master_receive函數為i2c_application.c文件所提供的應用層接口函數,參數包括:I2C結構體指針、從機地址、接收數據指針、接收數據字節(jié)數和函數超時時間。

注:此函數為Artery所提供的標準主機接收函數。用戶也可根據前述主機接收流程,自行編寫主機接收函數。

從機通信流程

從機通信初始化

從機地址配置

每個I2C從設備可同時支持2個從設備地址,由OADDR1和OADDR2指定

I2C_OADDR1

通過ADDR1EN使能

通過ADDR1MODE配置為7位(默認)或10位地址

I2C_OADDR2

通過ADDR2EN使能

固定7位地址模式

可通過ADDR2MASK[2:0]來在進行地址匹配比較時屏蔽掉0~7個LSB地址位
ADDR2MASK=0表示7位地址中的每一位都要參與匹配比較
ADDR2MASK=7表示任何非保留地址的7位地址都會被該從設備應答

從機地址匹配

當I2C啟用的地址選中匹配時,ADDRF中斷狀態(tài)標志會被置1,如果ADDRIEN位為1,就會產生一個中斷。如果兩個從地址都使能,在地址匹配產生ADDR中斷時,可以查看狀態(tài)寄存器中的ADDR[6:0]來得知是OADDR1還是OADDR2被尋址了。

從機字節(jié)控制模式(通常SMBus模式下才使用)

從設備可以對每個收到的字節(jié)進行應答控制。

所需配置:SCTRL=1 & RLDEN=1 & STRETCH=0 & CNT≥1

從機字節(jié)控制流程:

每收到一個字節(jié)TCRLD置位,時鐘延展于第8和第9個脈沖之間

軟件讀取RXDT中的值,并決定是否置位ACK

軟件重裝載CNT=1來停止時鐘延展

應答或非應答信號在第9個脈沖時刻出現在總線上

注意:

置位SCTRL時,必須開啟時鐘延展,即STRETCH=0

CNT可以是大于1的值,來實現多個字節(jié)以自動ACK接收完畢后再啟動應答控制,從設備發(fā)送時推薦關閉SCTRL,此時無需字節(jié)應答控制。

從機通信初始化軟件接口

從機通信初始化所用到的軟件接口通過獨立的函數接口實現,如下:

wKgaomSKboGAITMzAACfHJp5GlA235.png

i2c_own_address1_set函數用于配置OADDR1地址模式以及ADDR1地址值。

i2c_own_address2_set函數用于配置ADDR2地址值以及ADDR2屏蔽位。

i2c_own_address2_enable函數用于使能ADDR2地址。

i2c_slave_data_ctrl_enable函數用于使能從機字節(jié)控制模式。

i2c_clock_stretch_enable函數用于使能從機時鐘延展功能。

i2c_reload_enable函數用于使能發(fā)送數據重載模式。

從機發(fā)送流程

響應主機地址,匹配時回復ACK;

TXDT為空時,置位TDIS,從設備寫入發(fā)送數據;

每發(fā)送一個字節(jié)會收到ACK,且置位TDIS;

如果收到NACK位:

置位NACKF,產生中斷;

從設備自動釋放SCL和SDA(以便主設備發(fā)送STOP或RESTART);

如果收到STOP位:

置位STOPF,產生中斷;

當從機發(fā)送開啟時鐘延展(STRETCH=0)時,在等待ADDRF標志時和發(fā)送前一個數據的第9個時鐘脈沖后,會把TXDT中的數據拷貝到移位寄存器中,如果此時TDIS還是置位,表示TXDT沒有寫進待發(fā)送數據,將發(fā)生時鐘延展,如下流程圖:

圖9. I2C從機發(fā)送流程圖

wKgaomSKboGAD51rAAKZgzMETSw926.png

需要注意的是,在時鐘延展關閉(STRETCH=1)的情況下,如果在將要傳輸數據的第一個Bit位開始發(fā)送之前,也就是SDA邊沿產生之前,如果數據還未寫入TXDT數據寄存器,那么會發(fā)生欠載錯誤,此時I2C_STS的OUF將會置1,并將0xFF發(fā)送到總線。

為了能及時的寫入數據,可以在通信開始前,先將數據寫入到DT寄存器:軟件先將TDBE置1,目的是為了清空TXDT寄存器的數據,然后將第一個數據寫入TXDT寄存器,此時TDBE清零。

圖10. I2C從機發(fā)送時序圖

wKgZomSKboGAMotrAAC0mWpEz3k265.png

從機發(fā)送流程軟件接口

從機發(fā)送通過獨立的函數接口實現,如下:

wKgZomSKboGAH6v8AAAf2UJXPVs843.png

i2c_slave_transmit函數為i2c_application.c文件所提供的應用層接口函數,參數包括:I2C結構體指針、發(fā)送數據指針、發(fā)送數據字節(jié)數和函數超時時間。

注:此函數為Artery所提供的標準從機發(fā)送函數。用戶也可根據前述從機發(fā)送流程,自行編寫從機發(fā)送函數。

從機接收流程

當收到數據后,RDBF=1,讀取RXDT數據寄存器,RDBF被自動清零;

重復步驟2直到所有數據接收完成;

等待收到STOP條件,當收到STOP條件時,I2C_STS的STOPF置1,將I2C_CLR的STOPC寫1,清除STOPF標志,傳輸結束。

圖11. I2C從機接收流程圖

wKgZomSKboGAGnc9AAIKpVln_ao253.png

圖12. I2C從機接收時序圖

wKgaomSKboGAUK6mAACmpXsa4pA834.png

從機接收流程軟件接口

從機接收通過獨立的函數接口實現,如下:

wKgaomSKboGAKbY4AAAfkzWXhAE635.png

i2c_slave_receive函數為i2c_application.c文件所提供的應用層接口函數,參數包括:I2C結構體指針、接收數據指針、接收數據字節(jié)數和函數超時時間。

注:此函數為Artery所提供的標準從機接收函數。用戶也可根據前述從機接收流程,自行編寫從機接收函數。

I2C配置工具

功能簡介

I2C配置工具Artery_I2C_Timing_Configuration.exe可以實現對主機和從機的時鐘、數字濾波、模擬濾波配置。

資源準備

軟件環(huán)境Artery_I2C_Timing_Configuration.exe

圖13. Artery I2C Timing Configuration

wKgZomSKboGABv2lAAF-FZIFSt4238.png

使用步驟

選擇芯片型號

選擇當前使用的芯片型號,例如可以選擇AT32F425。

選擇設備模式

Master:主模式,I2C作為主機;

Slave:從模式,I2C作為從機。

選擇I2C速度模式

Standard-mode:標準模式,范圍0~100kHz;

Fast-mode:快速模式,范圍0~400kHz;

Fast-mode Plus:增強快速模式,范圍0~1000kHz。

設置I2C速度(單位kHz)

根據實際需求設置I2C通信速度,例如需要通信速度為10kHz,那么這里設置為10。

設置I2C時鐘源頻率(單位kHz)

根據實際使用的I2C時鐘源頻率來配置,例如AT32425 I2C時鐘源為PCLK1,當AT32425主頻為144MHz,APB1為144MHz時,這里設置為144000。

模擬濾波使能

On:打開;

Off:關閉。

模擬濾波使能后,將過濾50ns以下的脈沖。

數字濾波(范圍0~15)

數字濾波時間=數字濾波值xTI2C_CLK;

其中TI2C_CLK=1/I2C時鐘源頻率。

當值為0時,數字濾波關閉,當值>0時將過濾小于數字濾波時間的脈沖。

上升時間(tr單位ns)

SCL和SDA總線的上升沿,如圖18所示。I2C協議中規(guī)定了在標準模式(Standard-mode)、

快速模式(Fast-mode)、增強快速模式(Fast-mode Plus)下的范圍,詳情請參照表1。上升時間和上拉電阻的阻值關系很大,上拉電阻越小,上升時間越短,可以支持的通信速度就越快,但是功耗也越高。

表2中給出了一些常用上拉電阻阻值所對應的上升沿時間,實際可能會因為總線掛的設備數量、布線等差異而有所不同,僅供參考。

下降時間(tf單位ns)

SCL和SDA總線的下降沿,如圖18所示。I2C協議中規(guī)定了在標準模式(Standard-mode)、快速模式(Fast-mode)、增強快速模式(Fast-mode Plus)下的范圍,詳情請參照表1。

圖14. 上升沿(tr)下降沿(tf)規(guī)范

wKgaomSKboGAEzAuAACP-5GaC2c214.png

表1. I2C時間規(guī)范

wKgaomSKboGARYfRAACS3ud4wuM196.png

表2. 常用上拉電阻阻值的tr、tf參考值(VDD=3.3V)

wKgZomSKboGAfLCZAABg3mTMtBE657.png

注:該值是總線上連接兩片AT32MCU,一個作為主機,一個作為從機測試出來的值,實際可能會因為總線掛的設備數量、布線等差異而有所不同。

產生代碼

點擊產生代碼,上訴配置的值,將會以代碼的形式產生出來,如下圖紅框所示,只需要將右側輸出的代碼替換到自己的程序即可。

圖15. 代碼產生

wKgZomSKboGAKG1yAAOAWdFWeUA838.png

審核編輯:湯梓紅

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

    關注

    10

    文章

    2866

    瀏覽量

    87981
  • dma
    dma
    +關注

    關注

    3

    文章

    559

    瀏覽量

    100420
  • I2C接口
    +關注

    關注

    1

    文章

    124

    瀏覽量

    25137
  • 雅特力
    +關注

    關注

    0

    文章

    156

    瀏覽量

    7974
  • AT32
    +關注

    關注

    1

    文章

    113

    瀏覽量

    2072

原文標題:AT32講堂057 | 雅特力AT32F425 I2C使用指南

文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AT32F402/F405 I2C使用指南

    I2C接口簡介I2C接口是由數據線SDA和時鐘線SCL構成,在標準模式下通信速度可達到100kHz,快速模式下則可以達到400kHz,增強快速模式可達到1MHz。一幀數據傳輸從開始信號開始,在結束
    的頭像 發(fā)表于 11-20 01:03 ?75次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>402/<b class='flag-5'>F</b>405 <b class='flag-5'>I2C</b><b class='flag-5'>使用指南</b>

    光隔離器選擇指南:TPS2384 I2C接口

    電子發(fā)燒友網站提供《光隔離器選擇指南:TPS2384 I2C接口.pdf》資料免費下載
    發(fā)表于 10-11 09:34 ?0次下載
    光隔離器選擇<b class='flag-5'>指南</b>:TPS2384 <b class='flag-5'>I2C</b>接口

    AT32講堂087 | AT32 IDE快速入門指南

    新建項目新項目向導AT32ID提供支持MCU的C語言項目模板,方便用戶快速創(chuàng)建項目。菜單欄【File】>【New】>【CProject】。新建項目向導的對話框將出現。在對
    的頭像 發(fā)表于 09-15 08:08 ?356次閱讀
    AT32講堂087 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32 IDE快速入門<b class='flag-5'>指南</b>

    I2C基本指南

    電子發(fā)燒友網站提供《I2C基本指南.pdf》資料免費下載
    發(fā)表于 09-10 09:40 ?0次下載
    <b class='flag-5'>I2C</b>基本<b class='flag-5'>指南</b>

    STM32CUBEMX(7)--移植AT32F403AVGT(兼容STM32F103VGT6),DAC輸出電壓

    概述 本篇文章主要介紹如何使用STM32CubeMX移植到AT32F403AVGT7,并通過DAC輸出電壓,在芯片中有2個12位的DA
    發(fā)表于 09-06 16:40

    I2C邏輯選型指南

    電子發(fā)燒友網站提供《I2C邏輯選型指南.pdf》資料免費下載
    發(fā)表于 06-20 16:20 ?1次下載

    AT32F423入門使用指南

    初步環(huán)境準備開發(fā)環(huán)境下載地址:
    的頭像 發(fā)表于 05-14 08:15 ?1334次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>423入門<b class='flag-5'>使用指南</b>

    什么是I2C協議 I2C總線的控制邏輯

    在實際使用過程中,I2C比較容易出現的一個問題就是死鎖 ,死鎖在I2C中主要表現為:I2C死鎖時表現為SCL為高,SDA一直為低。
    發(fā)表于 03-12 09:17 ?952次閱讀
    什么是<b class='flag-5'>I2C</b>協議 <b class='flag-5'>I2C</b>總線的控制邏輯

    AT32F423 GPIO使用指南

    GPIO特性AT32F423支持多達86個雙向I/O引腳,這些引腳分為6組,分別為PA0-PA15、PB0-PB15、PC0-PC15、PD0-PD15、PE0-PE15
    的頭像 發(fā)表于 03-05 08:18 ?863次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>423 GPIO<b class='flag-5'>使用指南</b>

    GD32 MCU硬件I2C不可靠不如軟件I2C?來看看紅楓派開發(fā)版的硬件I2C驅動如何做到穩(wěn)得一批

    在一個評論中,看到網友對硬件I2C的討論,硬件I2C Busy找不到原因、軟件I2C穩(wěn)得一批。
    的頭像 發(fā)表于 02-23 09:37 ?2698次閱讀
    GD32 MCU硬件<b class='flag-5'>I2C</b>不可靠不如軟件<b class='flag-5'>I2C</b>?來看看紅楓派開發(fā)版的硬件<b class='flag-5'>I2C</b>驅動如何做到穩(wěn)得一批

    AT32F423 I2C使用指南

    I2C接口簡介I2C接口是由數據線SDA和時鐘線SCL構成,在標準模式下通信速度可達到100kHz,快速模式下則可以達到400kHz,增強快速模式可達到1MHz。一幀數據傳輸從開始信號開始,在結束
    的頭像 發(fā)表于 02-19 13:26 ?538次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>423 <b class='flag-5'>I2C</b><b class='flag-5'>使用指南</b>

    AT32F423 I 2C使用指南

    電子發(fā)燒友網站提供《AT32F423 I 2C使用指南.pdf》資料免費下載
    發(fā)表于 02-01 09:30 ?0次下載
    AT32<b class='flag-5'>F</b>423 <b class='flag-5'>I</b> <b class='flag-5'>2C</b><b class='flag-5'>使用指南</b>

    AT32F423時鐘配置入門指南

    電子發(fā)燒友網站提供《AT32F423時鐘配置入門指南.pdf》資料免費下載
    發(fā)表于 01-31 09:37 ?1次下載
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>423時鐘配置入門<b class='flag-5'>指南</b>

    AT32F425入門使用指南

    電子發(fā)燒友網站提供《AT32F425入門使用指南.pdf》資料免費下載
    發(fā)表于 12-18 11:14 ?6次下載
    <b class='flag-5'>AT32F425</b>入門<b class='flag-5'>使用指南</b>

    AT32F435 & AT32F437入門使用指南

    電子發(fā)燒友網站提供《AT32F435 & AT32F437入門使用指南.pdf》資料免費下載
    發(fā)表于 12-18 11:13 ?1次下載
    AT32<b class='flag-5'>F</b>435 & AT32<b class='flag-5'>F</b>437入門<b class='flag-5'>使用指南</b>