CH03-06-STM32F40x的I2C通信模塊原理_第1頁
CH03-06-STM32F40x的I2C通信模塊原理_第2頁
CH03-06-STM32F40x的I2C通信模塊原理_第3頁
CH03-06-STM32F40x的I2C通信模塊原理_第4頁
CH03-06-STM32F40x的I2C通信模塊原理_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《嵌入式系統(tǒng)設(shè)計原理》STM32F40x的I2C通信模塊原理主講人:賴樹明東莞理工學(xué)院05I2C總線控制與應(yīng)用作業(yè)01I2C總線介紹02I2C總線時序03I2C總線時序編程04FT5206觸摸屏驅(qū)動示例01I2C總線介紹總線概述總線物理拓?fù)浣Y(jié)構(gòu)總線通信原理總線特征I2C總線與UART比較I2C總線介紹總線概述01I2C又稱IIC,即Inter-IntegratedCircuit(內(nèi)部集成電路)。I2C總線是PHLIPS公司推出的一種串行同步通信總線。I2C總線有兩根雙向信號線,一根數(shù)據(jù)線SDA,另一根時鐘線SCL。簡介I2C總線應(yīng)用非常廣泛,尤其在傳感器類芯片中,如溫度濕度傳感器、光強(qiáng)傳感器,觸摸屏傳感器、加速度傳感器。應(yīng)用I2C總線介紹總線物理拓?fù)浣Y(jié)構(gòu)01拓普結(jié)構(gòu)主從結(jié)構(gòu),一條總線并聯(lián)多個設(shè)備,任何一時刻,只能有一個是主機(jī),其他是從機(jī)??偩€上每個從機(jī)都有一個惟一的設(shè)備地址,用于供主機(jī)尋址。通信只能由主機(jī)發(fā)起,主機(jī)對總線具備有絕對的控制權(quán)。IIC設(shè)備的接口內(nèi)部是開漏輸出,無法輸出高電平,在硬件設(shè)計中,SDA,SCL線必須有上拉電阻,通過上拉電阻實現(xiàn)高電平輸出,上拉電阻一般在4.7K~100K之間。I2C總線介紹總線通信原理01數(shù)據(jù)傳輸主機(jī)發(fā)送起始信號發(fā)送從機(jī)地址,并指明操作類型(讀或?qū)懀┓较蛭唬?表示讀數(shù)據(jù),0表示寫數(shù)據(jù)。等待從機(jī)發(fā)送應(yīng)答信號。傳輸數(shù)據(jù):如果是寫操作則主機(jī)發(fā)送數(shù)據(jù),如果讀操作,則主機(jī)接收數(shù)據(jù)。應(yīng)答周期:如果是寫操作,則從機(jī)發(fā)送應(yīng)答,如果是讀操作,則主機(jī)發(fā)送應(yīng)答。數(shù)據(jù)傳送完畢后,主機(jī)發(fā)送停止總線信號。數(shù)值傳遞時先發(fā)送數(shù)據(jù)高位,再發(fā)送數(shù)據(jù)低位。傳輸說明I2C總線介紹總線特征01通信只能由主機(jī)主動發(fā)起,主機(jī)對通信過程具備絕對的控制權(quán)。I2C總線數(shù)據(jù)傳輸速率:標(biāo)準(zhǔn)模式可達(dá)100kbit/s(所有器件都支持);快速模式可達(dá)400kbit/s(大部分器件支持)高速模式可達(dá)3.4Mbit/s(少量新型器件支持)數(shù)據(jù)傳輸只能以字節(jié)(8位)為單位進(jìn)行數(shù)據(jù)傳輸,先發(fā)送高位,再發(fā)送低位。同一時刻只能有一個設(shè)備是主設(shè)備,其他都是從設(shè)備,從設(shè)備地址是唯一的。通常MCU設(shè)備作為主設(shè)備,其他作為從設(shè)備(有多個MCU時總線會自動仲裁)。I2C設(shè)備地址有兩種:7位地址和10位地址,其中7位地址的器件較常見。同一條總線上可以同時有7位地址設(shè)備和10位地址設(shè)備共存。重要特征I2C總線介紹總線特征01設(shè)備地址組成:由固化地址和可編程地址構(gòu)成:固化地址:芯片出廠就固定了;可編程地址:由使用都硬件設(shè)計或軟件配置決定的。示例:At24C02芯片設(shè)備地址:地址7位:高4位是固定為1010,這部分地址稱為固化地址

低3位是:A2~A0,可編程地址,由硬件設(shè)計決定一條總線上可掛載的設(shè)備數(shù)量:理論上,只要能保證每個從設(shè)備地址惟一,7位地址模式可以掛載127個設(shè)備,10位地址掛載1023個設(shè)備(0不能用于設(shè)備地址),但是I2C總線上可掛接的設(shè)備數(shù)量受總線最大電容400pF限制。思考:一條總線可以接多少個AT24C02?8個??!重要特征I2C總線介紹I2C總線與UART比較01特征對比名稱IIC總線UART通信方式同步、半雙工異步、全雙工數(shù)據(jù)位長度8位5~8位通信速度標(biāo)準(zhǔn)三種模式(實際上也要可以是極限速度下任何一個速度)很多種(但是一般都有固定的速度)結(jié)構(gòu)主從設(shè)備通信不分主設(shè)備與從設(shè)備02I2C總線通信時序起始和停止條件應(yīng)答和非應(yīng)答信號三種通信過程時序波形I2C總線通信時序起始和停止條件時序02空閑狀態(tài):不進(jìn)行數(shù)據(jù)傳輸時SDA和SCL狀態(tài),都維持高電平。起始條件:SCL為高電平期間,SDA線由高到低電平,SCL線為低電平。停止條件:SCL為高電平期間,SDA線由低電平到高電平。時序描述時序波形I2C總線通信時序應(yīng)答和非應(yīng)答信號02起始條件+8位數(shù)據(jù)(高位在前)+應(yīng)答/非應(yīng)答信號+停止條件。數(shù)據(jù)位:SCL線為低電平準(zhǔn)備數(shù)據(jù),SCL線為高電平采集數(shù)據(jù)。應(yīng)答/非應(yīng)答信號:在每傳輸1字節(jié)后,跟隨一個應(yīng)答位:SCL高電平期間,低電平表示應(yīng)答信號,高電平表示非應(yīng)答信號。應(yīng)答信號/非應(yīng)答信號是由接收方發(fā)出,發(fā)送方檢測。時序描述主機(jī)寫操作I2C總線通信時序三種通信過程02主機(jī):1)發(fā)送起始條件

2)

發(fā)送7位地址數(shù)據(jù)(高位在前)+寫方向;3)檢測從機(jī)發(fā)的

應(yīng)答/非應(yīng)答信號;4)有應(yīng)答時開始發(fā)送1字節(jié)數(shù)據(jù);5)檢測從機(jī)發(fā)的應(yīng)答/非應(yīng)答信號;6)循環(huán)執(zhí)行4,5兩步發(fā)送數(shù)據(jù);7)發(fā)送停止條件,終止本次通信時序描述主機(jī)讀操作I2C總線通信時序三種通信過程02主機(jī):1)發(fā)送起始條件

2)

發(fā)送7位地址數(shù)據(jù)(高位在前)+讀方向;3)檢測從機(jī)發(fā)的

應(yīng)答/非應(yīng)答信號;4)有應(yīng)答時開始接收1字節(jié)數(shù)據(jù);5)發(fā)應(yīng)答信號給從機(jī)(不需要更多數(shù)據(jù)時發(fā)送非答應(yīng)信號);6)循環(huán)執(zhí)行4,5兩步接收數(shù)據(jù);7)發(fā)送停止條件,終止本次通信時序描述主機(jī)讀寫切換I2C總線通信時序三種通信過程02IIC總線允許讀/寫過程中不停止總線而直接重新發(fā)送起始條件,來切換讀/寫操作,或重啟總線重復(fù)原來的讀寫操作。時序描述03模擬I2C總線時序編程初始化函數(shù)起始條件實現(xiàn)停止條件實現(xiàn)發(fā)送應(yīng)答信號實現(xiàn)接收應(yīng)答信號實現(xiàn)發(fā)送一個字節(jié)數(shù)據(jù)接收一個字節(jié)數(shù)據(jù)voidIIC_GpioInit(void){RCC->AHB1ENR|=(1<<1);//PB使能

/*PB8---SCL*/GPIOB->MODER&=~(3<<16);GPIOB->MODER|=(1<<16);//PB8通用輸出

GPIOB->OTYPER|=(1<<8);//輸出開漏

/*PB9---SDA*/GPIOB->MODER&=~(3<<18);GPIOB->MODER|=(1<<18);//PB9通用輸出

GPIOB->OTYPER|=(1<<9);//PB9開漏輸出開漏

GPIOB->PUPDR&=~(3<<18);GPIOB->PUPDR|=(1<<18);//PB9上拉

/*初始化為空閑狀態(tài)*/

SCL_H();SDA_H();}模擬I2C總線時序編程初始化函數(shù)03使用GPIO模擬IIC總線,IO引腳配置為普通輸入輸出模式(非復(fù)用功能)。SCL和SDA引腳配置為開漏輸出。當(dāng)要讀取數(shù)據(jù)時動態(tài)修改SDA為輸入方向。當(dāng)要發(fā)送數(shù)據(jù)時動態(tài)修改SDA為輸出方向。后面示例以PB8,PB9兩個IO口為例子:

PB8--SCL,PB9--SDA#defineSCL_H()(GPIOB->BSRRL=1<<8)#defineSCL_L()(GPIOB->BSRRH=1<<8)#defineSDA_H()(GPIOB->BSRRL=1<<9)#defineSDA_L()(GPIOB->BSRRH=1<<9)#defineRD_SDA()(!!(GPIOB->IDR&1<<9))代碼實現(xiàn)宏定義GPIO配置時序波形voidIIC_Start(void){SCL_H();//剛開始,IIC總線為高電平

SDA_H();//剛開始,IIC總線為高電平iic_delay();//起始信號的建立時間

SDA_L();//產(chǎn)生下降沿

iic_delay();//起始信號的保持時間

SCL_L();//為后面數(shù)據(jù)傳輸做準(zhǔn)備}相關(guān)操作模擬I2C總線時序編程起始條件實現(xiàn)03SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用iic_delay:是滿足I2C時延要求的函數(shù)代碼實現(xiàn)時序波形voidIIC_Stop(void){SDA_L();//拉低SDA線SCL_H();//時鐘線準(zhǔn)備為高電平

iic_delay();//停止信號的建立時間。

SDA_H();//拉高數(shù)據(jù)線,產(chǎn)生上升沿。

iic_delay();//延時}相關(guān)操作模擬I2C總線時序編程停止條件實現(xiàn)03SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用iic_delay:是滿足I2C時延要求的函數(shù)代碼實現(xiàn)時序波形//ack0:表示應(yīng)答;1:表示非應(yīng)答voidIIC_send_ack(u8ack){ack?SDA_H():SDA_L();

iic_delay();//延時SCL_H();//穩(wěn)定數(shù)據(jù)線數(shù)據(jù)

iic_delay();//延時

SCL_L();//拉低}模擬I2C總線時序編程發(fā)送應(yīng)答信號實現(xiàn)03相關(guān)操作SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用iic_delay:是滿足I2C時延要求的函數(shù)時序波形/*備注:返回:0表示應(yīng)答,1表示非應(yīng)答*/u8IIC_check_ack(void){u8is_ack=0;SCL_L();//讓從設(shè)備準(zhǔn)備數(shù)據(jù)

SDA_H();//釋放SDA線的控制權(quán)

iic_delay();//延時

SCL_H();//穩(wěn)定SDA線數(shù)據(jù)

is_ack=RD_SDA();//讀數(shù)據(jù)

iic_delay();SCL_L();//完整周期returnis_ack;//返回應(yīng)答/非應(yīng)答}模擬I2C總線時序編程接收應(yīng)(非)答信號實現(xiàn)03相關(guān)操作SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用RD_SDA():讀取SDA線電平狀態(tài)宏調(diào)用iic_delay:是滿足I2C時延要求的延時函數(shù)時序波形//返回:0應(yīng)答,發(fā)送成功;1非應(yīng)答,發(fā)送失敗u8IIC_WriteByte(u8data){u8i,ack;for(i=0;i<8;i++){

//發(fā)送數(shù)據(jù)0或1到SDA線上

(data&0x80)?SDA_H():SDA_L();iic_delay();//延時SCL_H();//穩(wěn)定數(shù)據(jù)

iic_delay();//延時SCL_L();//準(zhǔn)備發(fā)下一位數(shù)據(jù)。

data<<=1;//移動下一位待發(fā)數(shù)據(jù)}ack=IIC_check_ack();//檢測應(yīng)答信號returnack;}模擬I2C總線時序編程發(fā)送一個字節(jié)數(shù)據(jù)03相關(guān)操作SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用iic_delay:是滿足I2C時延要求的延時函數(shù)代碼實現(xiàn)要點:時序波形//接收一字節(jié)數(shù)據(jù),并且發(fā)送應(yīng)答/非應(yīng)答//參數(shù):ack為1表示發(fā)送非應(yīng)答,為0發(fā)送應(yīng)答//返回:接收到的數(shù)據(jù)u8IIC_ReadByte(u8ack){u8i,buf=0;SDA_H();//主機(jī)釋放SDA數(shù)據(jù)線

for(i=0;i<8;i++){iic_delay();//延時

SCL_H();buf<<=1;//移出最低位//讀取1bit數(shù)據(jù),保存到最低位

buf|=RD_SDA();

iic_delay();//延時

SCL_L();//準(zhǔn)備接收下一位數(shù)據(jù)

}IIC_send_ack(ack);returnbuf;}模擬I2C總線時序編程接收一個字節(jié)數(shù)據(jù)03相關(guān)操作SCL_H():拉高SCL線的宏調(diào)用SCL_L():是拉低SCL線的宏調(diào)用SDA_H():是拉高SDA線的宏調(diào)用SDA_L():是拉低DA線的宏調(diào)用iic_delay:是滿足I2C時延要求的延時函數(shù)代碼實現(xiàn)04FT5206觸摸屏驅(qū)動示例(可選內(nèi)容:學(xué)員根據(jù)興趣選擇性學(xué)習(xí))芯片介紹讀時序分析重要寄存器硬件原理圖分析軟件設(shè)計內(nèi)部框架圖FT5206觸摸屏驅(qū)動示例芯片介紹04AFE:觸摸面板接口電路,連接電容觸摸屏面板,用于做觸點數(shù)據(jù)采集。外部接口電路:I2C,SPI,UART,GPIO,INT,WAKE,/RSTMCU內(nèi)核:內(nèi)置一個8051單片機(jī)電路核心EAC:電源,時鐘,功耗管理的電路主機(jī)接口圖FT5206觸摸屏驅(qū)動示例芯片介紹04詳細(xì)芯片手冊:FT5x06_DS.pdfFT5206-書簽版.pdfFT5206-書簽版.pdf設(shè)備地址FT5x06支持I2CorSPI接口設(shè)備地址:由I2CCON控制器內(nèi)容決定,A[6:4]:固定011,其中A[3:0]是由當(dāng)前運(yùn)行的單片機(jī)程序決定,本實驗箱使用的FT5X06芯片設(shè)備地址是0X38,(二進(jìn)制:0111000),讀數(shù)據(jù)發(fā)出的地址字節(jié)是0x71(二進(jìn)制:01110001),寫數(shù)據(jù)發(fā)出的地址字節(jié)是0x70(二進(jìn)制:01110000)。FT5206觸摸屏驅(qū)動示例芯片介紹04FT5206觸摸屏驅(qū)動示例芯片介紹04復(fù)位芯片芯片上電需要對它進(jìn)行復(fù)位,保證芯片內(nèi)部邏輯電平是正確的,復(fù)位時序很簡單,只需要拉低REST引用一段時間,然后重新拉高即可。FT5206觸摸屏驅(qū)動示例芯片介紹04讀取據(jù)方法1FT5206觸摸屏驅(qū)動示例芯片介紹04讀取據(jù)方法1FT5206觸摸屏驅(qū)動示例讀寫序分析04寫數(shù)據(jù)時序主機(jī)與觸摸屏芯片通信流程:起始信號

從機(jī)地址+寫方向

檢測應(yīng)答

發(fā)送寄存器地址

檢測應(yīng)答

循環(huán)[發(fā)送數(shù)據(jù)

檢測應(yīng)答]

發(fā)送停止信號FT5206觸摸屏驅(qū)動示例讀寫序分析04讀取數(shù)據(jù)時序主機(jī)與觸摸屏芯片通信流程:起始信號

從機(jī)地址+寫方向

檢測應(yīng)答

發(fā)送寄存器地址

檢測應(yīng)答

發(fā)送停止信號;起始信號

從機(jī)地址+讀方向

檢測應(yīng)答

循環(huán)[讀取數(shù)據(jù)地址

發(fā)送應(yīng)答]發(fā)送停止信號;寄存器說明寄存器名稱:工作模式寄存器(0x00)寄存器作用:該寄存器用于設(shè)置FT5206的工作模式。MODE[2:0]用于控制FT5206的工作模式,一般設(shè)置為:000b,表示正常工作模式。FT5206觸摸屏驅(qū)動示例重要寄存器04寄存器說明寄存器名稱:中斷狀態(tài)控制寄存器(0xA4)寄存器作用:該寄存器用于設(shè)置FT5206的工作模式。MODE[2:0]用于控制FT5206的工作模式,一般設(shè)置為:000b,表示正常工作模式。寄存器說明寄存器名稱:有效觸摸門限控制寄存器(0X80)寄存器作用:該寄存器用于設(shè)置FT5206的有效觸摸門限值。該寄存器8位數(shù)據(jù)都有效,用于設(shè)置FT5206有效觸摸的門限值,計算公式為:有效觸摸門限值=T[7:0]*4T[7:0]所設(shè)置的值越小,觸摸越靈敏,默認(rèn)狀態(tài)下T[7:0]=70。FT5206觸摸屏驅(qū)動示例重要寄存器04寄存器說明寄存器名稱:激活周期控制寄存器(0X88)寄存器作用:該寄存器用于設(shè)置FT5206的激活周期。該寄存器只有低4位有效,用于設(shè)置FT5206的激活周期。P[3:0]的設(shè)置范圍為:3~14,不過建議一般不要小于12。寄存器說明寄存器名稱:

觸摸狀態(tài)寄存器(0X02)寄存器作用:寄存器用于讀取FT5206的觸摸狀態(tài)。該寄存器只有低4位有效,TD[3:0]的取值范圍是:1~5,表示有多少個有效觸摸點。我們可以根據(jù)這個寄存器的值來判斷有效觸摸點的個數(shù),然后通過0X03/0X09/0X0F/0X15和0X1B等寄存器來讀取觸摸坐標(biāo)數(shù)據(jù)。FT5206觸摸屏驅(qū)動示例重要寄存器04寄存器說明寄存器名稱:觸摸數(shù)據(jù)寄存器(0X03~0X1E)寄存器作用:這里總共包括20個寄存器,他們是:0X03~0X06、0X09~0X0C、0X0F~0X12、0X15~0X18、0X1B~0X1E。每4個寄存器為1組,表示一個觸摸點的坐標(biāo)數(shù)據(jù),比如0X03~0X06,則表示觸摸點1的坐標(biāo)數(shù)據(jù),其他的以此類推。。FT5206觸摸屏驅(qū)動示例重要寄存器04EventFLAG:用于表示觸摸狀態(tài):00按下;01松開;10持續(xù)觸摸;11保留。一般我們只需要判斷該狀態(tài)為10即可,即持續(xù)觸摸狀態(tài),就可以穩(wěn)定的讀取觸摸坐標(biāo)數(shù)據(jù)了。TouchID:觸點ID號,裸機(jī)中一般用不到,在Linux系統(tǒng)中使用時比較有用,用于實現(xiàn)觸點追蹤功能。X[11:8]<<8|X[7:0]:是X坐標(biāo)數(shù)據(jù),這些數(shù)據(jù)以12位的形式表示,分兩個寄存器存儲。Y[11:8]<<8|Y[7:0]:是Y坐標(biāo)數(shù)據(jù),這些數(shù)據(jù)以12位的形式表示,分兩個寄存器存儲。原理圖說明查看STM32F407物聯(lián)網(wǎng)開發(fā)平臺-智能網(wǎng)關(guān)原理圖.pdf文檔,觸摸屏硬件設(shè)置原理圖如下所示:原理圖分析物聯(lián)網(wǎng)實驗箱主控與FT5206之間的通訊接口采用IIC接口模式,F(xiàn)T5206的七位器件地址為0X38(寫地址:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論