一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

從IIC實測波形入手,去理解IIC的通信原理

FPGA之家 ? 來源:CSDN技術(shù)社區(qū) ? 作者:碼農(nóng)愛學(xué)習(xí) ? 2021-04-09 18:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單片機(jī)的朋友都知道IIC通信這個工具,但好多人只是會用,內(nèi)部的原理不求甚解,或是想要了解其原理,但卻對抽象的時序描述一頭霧水。本文將從實測的IIC波形入手,帶你看到真實的IIC樣子,進(jìn)而去理解IIC的通信原理。

1IIC基礎(chǔ)知識

首先復(fù)習(xí)一下IIC基礎(chǔ)知識,這部分看不懂的請先帶著疑問,然后我們通過分析IIC的真實波形,這些疑問可能就豁然開朗了~

1.1 IIC是什么

IIC(Inter Integrated Circuit,集成電路總線)是一種由 PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。它是由數(shù)據(jù)線 SDA 和時鐘 SCL 構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在 CPU (單片機(jī))與IIC模塊之間、IIC模塊與IIC模塊之間進(jìn)行雙向傳送。

IIC的一些特點:

IIC是半雙工,而不是全雙工

IIC是真正的多主機(jī)總線,(對比SPI在每次通信前都需要把主機(jī)定死,而IIC可以在通訊過程中,改變主機(jī)),如果兩個或更多的主機(jī)同時請求總線,可以通過沖突檢測和仲裁防止總線數(shù)據(jù)被破壞

起始和終止信號都是由主機(jī)發(fā)出的,連接到IIC總線上的器件,若具有IIC總線的硬件接口,則很容易檢測到起始和終止信號

在起始信號后必須發(fā)送一個7位從機(jī)地址+1位方向位,用“0”表示主機(jī)發(fā)送數(shù)據(jù),“1”表示主機(jī)接收數(shù)據(jù)。

每當(dāng)主機(jī)向從機(jī)發(fā)送完一個字節(jié)的數(shù)據(jù),主機(jī)總是需要等待從機(jī)給出一個應(yīng)答信號,以確認(rèn)從機(jī)是否成功接收到了數(shù)據(jù)

起始信號是必需的,結(jié)束信號和應(yīng)答信號,都可以不要

注:實際使用中,一般是單片機(jī)作為主機(jī),其它器件作為從機(jī),單片機(jī)先向器件發(fā)送信息表示要讀取數(shù)據(jù),之后轉(zhuǎn)變傳輸方向,器件發(fā)送數(shù)據(jù)到單片機(jī)。

1.2 IIC物理連接

使用IIC通信的IIC器件有很多,比如陀螺儀加速度計MPU6050,EEPROM存儲芯片AT24C02等,通過IIC總線,可以與單片機(jī)之間進(jìn)行數(shù)據(jù)傳輸。

IIC通信線只有只有兩根,數(shù)據(jù)線SDA的高低電平傳輸2進(jìn)制的數(shù)據(jù),時鐘線SCL通過方波信號提供時鐘節(jié)拍

多個IIC器件可以并聯(lián)在IIC總線上,每個器件有特定的地址,分時共享IIC總線

實際使用IIC當(dāng)然還要連接電源以及共地哦

4bc7726c-990f-11eb-8b86-12bb97331649.png

1.3 IIC時序

網(wǎng)上查找IIC的基礎(chǔ)知識,可能會搜到這樣的時序圖:

4c0114a4-990f-11eb-8b86-12bb97331649.png

看起來好復(fù)雜的樣子,這時可能一部分人就放棄思考了。

1.3.1 IIC起始結(jié)束信號

好吧,換個簡單點的圖,你也可能會搜到這樣的圖:

4c3b7a22-990f-11eb-8b86-12bb97331649.jpg

這張圖看起來更簡單一些,描述了IIC的起始和停止條件:

起始:時鐘線SCL為高時,數(shù)據(jù)線SDA由高到低

停止:時鐘線SCL為高時,數(shù)據(jù)線SDA由低到高

注:SDA和SCL同時為高時,為IIC總線的空閑狀態(tài)

1.3.2 IIC應(yīng)答

再來看下面這張圖:

4c6a89c0-990f-11eb-8b86-12bb97331649.jpg

這表示IIC的應(yīng)答機(jī)制

下面的波形:SCL,主機(jī)產(chǎn)生的時鐘脈沖

上面的波形:SDA,主機(jī)發(fā)送的8位數(shù)據(jù)

中間的波形:SDA,從機(jī)在第9個時鐘信號進(jìn)行拉低回應(yīng),表示收到了主機(jī)發(fā)來的數(shù)據(jù),拉高則表示不應(yīng)答

注:實際上,上面和中間是同樣的SDA線,這里只是分開示意。因為IIC應(yīng)答是一種相互關(guān)系,單片機(jī)發(fā)數(shù)據(jù)給IIC器件,IIC器件要進(jìn)行應(yīng)答,表示收到了數(shù)據(jù),同樣,單片機(jī)接收IIC器件的數(shù)據(jù)后,也要給IIC器件一個應(yīng)答。

既然發(fā)送完都需要對方回應(yīng),那什么時候使用不應(yīng)答呢?就是在讀取到本次數(shù)據(jù)后,如果不需要繼續(xù)讀取,則發(fā)送非應(yīng)答,對方以為你沒收到這次數(shù)據(jù),則就不會繼續(xù)發(fā)送了。

1.3.3 IIC完整傳輸時序

4fa7ff50-990f-11eb-8b86-12bb97331649.png

開始標(biāo)志(S)發(fā)出后,主設(shè)備會傳送一個7 位的Slave 地址,并且后面跟著一個第8位,稱為Read/Write 位。

R/W 位表示主設(shè)備是在接受從設(shè)備的數(shù)據(jù)還是在向其寫數(shù)據(jù)。

然后,主設(shè)備釋放SDA 線,等待從設(shè)備的應(yīng)答信號(ACK)。每個字節(jié)的傳輸都要跟隨有一個應(yīng)答位。

應(yīng)答產(chǎn)生時,從設(shè)備將SDA 線拉低并且在SCL 為高電平時保持低。

數(shù)據(jù)傳輸以停止標(biāo)志(P)結(jié)束,然后釋放總線。但主設(shè)備也可以產(chǎn)生重復(fù)的開始信號去操作另一臺從設(shè)備,而不發(fā)出結(jié)束標(biāo)志。

所有的SDA 信號變化都要在SCL 時鐘為低電平時進(jìn)行,除了開始和結(jié)束標(biāo)志

1.4 常用的數(shù)據(jù)收發(fā)方式(時序)

上面1.3小節(jié)是IIC的基礎(chǔ)時序,在實際使用中,一般是對某個IIC器件的某個寄存器進(jìn)行讀寫操作,因此,對于寄存器的讀寫操作,還要遵循下面的組合時序邏輯。

1.4.1 寫一個字節(jié)

用于對IIC器件某個寄存器的配置,如對MPU6050的某些參數(shù)進(jìn)行設(shè)置。

4fec4a0c-990f-11eb-8b86-12bb97331649.png

寫寄存器時,主設(shè)備除了發(fā)出開始標(biāo)志和地址位,還要加一個R/W 位,0 為寫,1 為讀

在第9 個時鐘周期(高電平時),MPU6050 產(chǎn)生應(yīng)答信號

主設(shè)備開始傳送寄存器地址,并接到應(yīng)答

然后開始傳送寄存器數(shù)據(jù),仍然要有應(yīng)答信號

最后主設(shè)備發(fā)送停止信號。

1.4.2 連續(xù)寫多個字節(jié)

對連續(xù)地址的寫入,這個用的較少。

50364878-990f-11eb-8b86-12bb97331649.png

通信時序與上面的“寫一個字節(jié)”類似,上面是寫一個字節(jié)后就停止了,若要連續(xù)寫,則繼續(xù)寫即可,只要可以收到從機(jī)Ack。

1.4.3 讀一個字節(jié)

用于讀取IIC器件某個寄存器的數(shù)值。

50705d9c-990f-11eb-8b86-12bb97331649.png

首先由主設(shè)備產(chǎn)生開始信號,然后發(fā)送從設(shè)備地址位和一個寫數(shù)據(jù)位,等待應(yīng)答

然后發(fā)送寄存器地址,才能開始讀寄存器

收到應(yīng)答信號后,主設(shè)備再發(fā)一個開始信號,然后發(fā)送從設(shè)備地址位和一個讀數(shù)據(jù)位

然后,作為從設(shè)備的MPU6050 產(chǎn)生應(yīng)答信號并開始發(fā)送寄存器中的數(shù)據(jù)

通信以主設(shè)備產(chǎn)生的拒絕應(yīng)答信號(nACK)和結(jié)束標(biāo)志(Stop)結(jié)束

拒絕應(yīng)答信號(nACK)產(chǎn)生定義為SDA 數(shù)據(jù)在第9 個時鐘周期一直為高

1.4.4 連續(xù)讀多個字節(jié)

也是用于讀取IIC器件某個寄存器的數(shù)值,當(dāng)某些數(shù)據(jù)一位字節(jié)不夠表示,或有一組連續(xù)的數(shù)據(jù)需要讀時,可以使用該模式。

50a7c2f0-990f-11eb-8b86-12bb97331649.png

通信時序與上面的“讀一個字節(jié)”類似,上面是讀一個字節(jié)后就nAck叫停,若要連續(xù)寫,則發(fā)送Ack,直到不需要繼續(xù)讀時再回復(fù)nAck。

復(fù)習(xí)了這么多,之前對IIC懵懵懂懂的是否依然犯迷糊,好了,現(xiàn)在從理論進(jìn)入實踐,看看真實的IIC是什么樣子。

2初識IIC真實波形

下面這張圖(請橫屏觀看)是通過示波器抓取的IIC波形,可以看到:

時鐘線SCL是一種間歇性的方波(需要通信時才產(chǎn)生方波)

數(shù)據(jù)線SDA根據(jù)SCL提供的節(jié)拍,高電平代表數(shù)據(jù)1,低電平代表數(shù)據(jù)0

沒有數(shù)據(jù)傳輸時,SDA和SCL均為高電平狀態(tài)

起始信號后,數(shù)據(jù)是9個一組,包括8位的數(shù)據(jù)和另一方的1位回應(yīng)

圖中紅色數(shù)字表示單片機(jī)發(fā)送的8位數(shù)據(jù),黃色數(shù)字表示IIC器件回應(yīng)的信號,低電平0表示器件收到了單片機(jī)發(fā)來的數(shù)據(jù)。

現(xiàn)在對IIC波形有沒有多了一些直觀的認(rèn)識?下面再進(jìn)入編程階段,看看程序是怎么控制這兩根線的。

3IIC軟件編寫邏輯

IIC通信可以使用單片機(jī)自帶的硬件IIC,它提供了固定的引腳接口和函數(shù)庫。也可以自己通過軟件編寫來實現(xiàn)IIC時序,這時就可以任選引腳,也方便其它硬件平臺的移植。

下面通過軟件IIC的編寫,從軟件角度理解IIC通信邏輯。

以下函數(shù)都是單片機(jī)在執(zhí)行,即主機(jī)發(fā)出的動作,所以一定要從單片機(jī)的角度思考哦~

另外,不要看到程序就匆匆掠過,為幫助理解,我對代碼進(jìn)行了一定的注解,仔細(xì)分析每條代碼,想想與IIC的邏輯如何對應(yīng)起來,IIC邏輯還沒懂的,讀完本篇,分析過真實的IIC波形后,再來看看代碼,會有不一樣的體會。

起始IIC_Start()

//==================================//產(chǎn)生IIC起始信號//==================================void IIC_Start(void){ SDA_OUT(); //sda線輸出 IIC_SDA=1; delay_us(2); IIC_SCL=1; //時鐘線為高時 delay_us(2); IIC_SDA=0; //數(shù)據(jù)線由高到低 delay_us(4); IIC_SCL=0; //時鐘線拉低,鉗住IIC總線,準(zhǔn)備發(fā)送數(shù)據(jù)}

最后一句SCL拉低,然后就準(zhǔn)備產(chǎn)生時鐘信號,發(fā)送數(shù)據(jù)了。

停止IIC_Stop()

//==================================//產(chǎn)生IIC停止信號//==================================void IIC_Stop(void){ SDA_OUT(); //sda線輸出 IIC_SCL=0; //確保時鐘線為低時,數(shù)據(jù)線才能變化為0,否則這就可能成起始信號了! delay_us(2); IIC_SDA=0; delay_us(2); IIC_SCL=1; //時鐘線為高時 IIC_SDA=1; //數(shù)據(jù)線由低到高 delay_us(4); }

停止前也要確保SCL是拉低的狀態(tài)。

最后SDA和SCL都為高,即釋放IIC總線,IIC總線進(jìn)入空閑狀態(tài)。

等待應(yīng)答IIC_wait_Ack()

//==================================//等待應(yīng)答信號到來//用于發(fā)送模式下,發(fā)送8位后,等待器件應(yīng)答第9位//返回值:1,接收應(yīng)答失敗// 0,接收應(yīng)答成功//==================================u8 IIC_Wait_Ack(void){ u8 ucErrTime=0; SDA_IN(); //SDA設(shè)置為輸入 IIC_SDA=1;delay_us(1); //SDA先拉高,若被從機(jī)拉低則說明收到應(yīng)答信號 IIC_SCL=1;delay_us(1); //SCL拉高,產(chǎn)生第9位的脈沖 while(READ_SDA) { ucErrTime++; if(ucErrTime》250) { IIC_Stop(); return 1; } } IIC_SCL=0;//時鐘輸出0 //SCL拉低,結(jié)束第9位的脈沖 return 0; }

在一定是時間內(nèi)檢測SDA是否被從機(jī)拉低,被拉低則說明從機(jī)收到了數(shù)據(jù)。

產(chǎn)生應(yīng)答IIC_Ack()

//==================================//產(chǎn)生ACK應(yīng)答//用于讀取模式(SDA為in)讀了8位器件數(shù)據(jù)后,在第9位給出一個應(yīng)答,我還要繼續(xù)讀//==================================void IIC_Ack(void){ IIC_SCL=0; //確保時鐘線為低時,數(shù)據(jù)線才能變化為0,否則這就可能成起始信號了! SDA_OUT(); //SDA由讀取改為發(fā)送 delay_us(2); IIC_SDA=0; //拉低SDA,表示應(yīng)答 delay_us(2); IIC_SCL=1; //SCL先上升 delay_us(2); IIC_SCL=0; //SCL再下降,形成一個脈沖,應(yīng)答才生效}

單片機(jī)在接收器件數(shù)據(jù)后,進(jìn)行回應(yīng),表示接收到了器件的數(shù)據(jù)。

該函數(shù)用在連續(xù)讀取多個字節(jié)時,每讀完一個字節(jié)(8位),產(chǎn)生回應(yīng),表示還要進(jìn)行讀,這時器件就可以繼續(xù)發(fā)數(shù)據(jù)了。

當(dāng)單片機(jī)不需要繼續(xù)讀,如連續(xù)讀的最后一個字節(jié),或只讀一個字節(jié),單片機(jī)發(fā)送非應(yīng)答信號,這時器件以為單片機(jī)沒有收到數(shù)據(jù),接下來就不會再發(fā)數(shù)據(jù)了。

非應(yīng)答函數(shù)如下,就是拉高SDA:

不產(chǎn)生應(yīng)答IIC_nAck()

//==================================//不產(chǎn)生ACK應(yīng)答//用于讀取模式(SDA為in)讀了8位器件數(shù)據(jù)后,在第9位給出一個應(yīng)答,我不想讀了//==================================void IIC_NAck(void){ IIC_SCL=0; //確保時鐘線為低時,數(shù)據(jù)線才能變化為0,否則這就可能成起始信號了! SDA_OUT(); //SDA由讀取改為發(fā)送 IIC_SDA=1; //拉高SDA,表示不應(yīng)答 delay_us(2); IIC_SCL=1; //SCL先上升 delay_us(2); IIC_SCL=0; //SCL再下降,形成一個脈沖,不應(yīng)答才生效}

IIC發(fā)送一個字節(jié)

//==================================//IIC發(fā)送一個字節(jié)//返回從機(jī)有無應(yīng)答//1,有應(yīng)答//0,無應(yīng)答//==================================void IIC_Send_Byte(u8 txd){ u8 t; SDA_OUT(); //SDA發(fā)送模式 IIC_SCL=0; //拉低時鐘開始數(shù)據(jù)傳輸 for(t=0;t《8;t++) { IIC_SDA=(txd&0x80)》》7; //SDA高低電平表示數(shù)據(jù)1和0 txd《《=1; delay_us(2); //對TEA5767這三個延時都是必須的 IIC_SCL=1; //SCL先上升 delay_us(2); IIC_SCL=0; //SCL再下降,形成一個脈沖,發(fā)送一位數(shù)據(jù)生效 delay_us(2); }}

發(fā)送一個字節(jié),就是分8次循環(huán),產(chǎn)生8個時鐘信號,并將SDA賦值為0或1。

IIC讀取一個字節(jié)

//==================================//讀1個字節(jié)//ack=1時,發(fā)送ACK,ack=0,發(fā)送nACK //==================================u8 IIC_Read_Byte(unsigned char ack){ unsigned char i,receive=0; SDA_IN(); //SDA輸入模式 for(i=0;i《8;i++ ) { IIC_SCL=0; //SCL先下降,通過循環(huán),形成時鐘脈沖 delay_us(2); IIC_SCL=1; //SCL上升 receive《《=1; if(READ_SDA) receive++; //讀取并組合記錄數(shù)據(jù),++表示讀到1了,最低位置1 delay_us(1); } //讀取8位后,主機(jī)需要變?yōu)榘l(fā)送模式,在第9位進(jìn)行應(yīng)答或不應(yīng)答 //此時CLK還是高電平狀態(tài),不過下面的應(yīng)答會先將CLK拉低的 if (!ack) { //讀1個字節(jié),或讀多個字節(jié)讀到最后一個字節(jié)時,使用nACK //然后配合使用IIC停止信號 IIC_NAck();//發(fā)送nACK } else { //讀多個字節(jié)還沒讀完時,使用ACK,表示現(xiàn)在讀的ok,還要繼續(xù)讀 IIC_Ack(); //發(fā)送ACK } return receive;}

讀取一個字節(jié),也是分8次循環(huán),產(chǎn)生8個時鐘信號,并讀取SDA的高低電平信號,最后,根據(jù)要不要繼續(xù)讀下一個字節(jié),發(fā)送第9位的Ack或nACK。

4真實IIC波形詳細(xì)分析

4.1 讀取從機(jī)數(shù)據(jù)(單字節(jié)讀)

下面這張圖(請橫屏觀看)展示IIC讀某個器件的寄存器的一個字節(jié)的真實波形(注:實際是讀了2個不同寄存器的值,每個寄存器讀了1個字節(jié),所以,可以先只看前半部分哦~),我已對波形進(jìn)行了詳細(xì)的注解,并留意一下顏色區(qū)分。

對照著圖,再來溫習(xí)一下各個信號的特點:

起始信號:時鐘線SCL為高時,數(shù)據(jù)線SDA由高到低

停止信號:時鐘線SCL為高時,數(shù)據(jù)線SDA由低到高

數(shù)據(jù)信號:連續(xù)的8位,每一個SCL脈沖時鐘對應(yīng)的SDA,高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0

應(yīng)答信號:第9位(數(shù)據(jù)信號后),由對方產(chǎn)生的回應(yīng),0為產(chǎn)生回應(yīng),1為不產(chǎn)生回應(yīng)

上面這幅圖中,單片機(jī)先產(chǎn)生起始信號,然后發(fā)送7位器件地址+1位寫標(biāo)志(綠色的0),并等待從機(jī)回應(yīng)(從機(jī)拉低SDA表示收到數(shù)據(jù)),接著發(fā)送8位寄存器地址,并等待從機(jī)回應(yīng)。然后,單片機(jī)先再次產(chǎn)生起始信號,發(fā)送7位器件地址+1位讀標(biāo)志(綠色的1),并等待從機(jī)回應(yīng)。從機(jī)收到讀的信號后,從機(jī)開始發(fā)送8位數(shù)據(jù),主機(jī)接收到數(shù)據(jù)后,主機(jī)發(fā)送nAck不應(yīng)答信號(圖中的Ack(1),主機(jī)將SDA拉高,從機(jī)則認(rèn)為主機(jī)剛才沒有收到它發(fā)送的數(shù)據(jù),從機(jī)將不再繼續(xù)發(fā)送),接著主機(jī)發(fā)送結(jié)束信號,讀取完成。

此圖后半部分是以相同方式讀了另一個寄存器的值。

另外,SCL信號都是由單片機(jī)產(chǎn)生,SDA信號由單片機(jī)和IIC器件(從機(jī))共同產(chǎn)生,當(dāng)需要對IIC器件的寄存器寫時,單片機(jī)產(chǎn)生SDA數(shù)據(jù),當(dāng)需要讀取IIC器件的寄存器數(shù)據(jù)時,改變傳輸方向,IIC器件產(chǎn)生SDA數(shù)據(jù)。

對于主機(jī)和從機(jī)什么時候控制SDA,還可以參考這個圖幫助理解:

4.2 讀取從機(jī)數(shù)據(jù)(多字節(jié)讀)

上面是單字節(jié)讀的波形,再來看看多字節(jié)的波形,前面的寫器件地址、寫寄存器地址1與單字節(jié)讀一樣,這張圖只顯示了后面不一樣的部分,主要區(qū)別在于單片機(jī)接收到數(shù)據(jù)1后,產(chǎn)生低電平的應(yīng)答,從而可以繼續(xù)讀取數(shù)據(jù)2。

(注意,因為傳感器這次測得的數(shù)據(jù)不一樣,所以讀出的數(shù)據(jù)也不一樣哦~)

注:以上的IIC真實波形,是使用是硬件IIC,自己編寫的軟件IIC測得的波形,可能在兩個信號的前后延時時間上稍有差別,但整體的時序邏輯肯定是一樣的。

4.3 配置從機(jī)寄存器(單字節(jié)寫與多字節(jié)寫)

對于寄存器的配置,也就是IIC的寫寄存器操作,我就不放圖了,參考上面的“常用的數(shù)據(jù)收發(fā)方式(時序)”以及上面的IIC讀寄存器的真實波形,IIC的寫寄存器的真實波形,應(yīng)該可以腦補(bǔ)出哦,哈哈~
編輯:lyn

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

    關(guān)注

    6067

    文章

    44997

    瀏覽量

    650730
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    306

    瀏覽量

    39520

原文標(biāo)題:從IIC實測波形入手,搞懂IIC通信

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    如何FX2LP設(shè)備的EEPROM讀取固件(.iic)?

    是否有任何工具可以 FX2LP 設(shè)備的 EEPROM 讀取固件(.iic)? 我想備份舊固件來重新編程我的設(shè)備,但我丟失了舊的 IIC 固件。
    發(fā)表于 05-07 06:37

    IIC接口的IIC_SCL和IIC_SDA引腳做普通GPIO,程序啟動不起來怎么解決?

    想用IIC接口的IIC_SCL和IIC_SDA引腳做普通GPIO,兩個引腳對應(yīng)的是GPIO58和GPIO59,更改代碼將設(shè)置為普通GPIO引腳模式后,程序啟動不起來。問:這種情況如何解決,官方支持這種應(yīng)用嗎?
    發(fā)表于 05-06 08:59

    ZYNQ FPGA的PS端IIC設(shè)備接口使用

    zynq系列中的FPGA,都會自帶兩個iic設(shè)備,我們直接調(diào)用其接口函數(shù)即可運用。使用xilinx官方提供的庫函數(shù),開發(fā)起來方便快捷。
    的頭像 發(fā)表于 04-17 11:26 ?1098次閱讀
    ZYNQ FPGA的PS端<b class='flag-5'>IIC</b>設(shè)備接口使用

    巨霖科技IIC Shanghai 2025精彩回顧

    近日,全球半導(dǎo)體行業(yè)矚目的國際集成電路展覽會暨研討會(IIC Shanghai 2025)在上海金茂君悅大酒店盛大開幕。
    的頭像 發(fā)表于 03-28 11:27 ?557次閱讀

    為什么IIC總線會難住這么多人?

    為什么 IIC 總線讓很多人頭疼?其實可以把它想象成一場復(fù)雜的 "設(shè)備對話游戲",新手容易在這些地方栽跟頭:
    的頭像 發(fā)表于 03-12 10:14 ?527次閱讀
    為什么<b class='flag-5'>IIC</b>總線會難住這么多人?

    使用FPGA控制DLPC3438,采用IIC協(xié)議進(jìn)行讀寫操作,讀取的數(shù)據(jù)存在錯誤,無法正確寄存器中讀取數(shù)據(jù)怎么解決?

    規(guī)定的字節(jié)數(shù)一致? (2)FPGA控制IIC讀數(shù)據(jù)按照如下協(xié)議,但是讀取的數(shù)據(jù)存在錯誤,無法正確寄存器中讀取數(shù)據(jù)。 (3)下圖為FPGA的IIC讀時序,請幫忙查看是否是FPGA的時序存在
    發(fā)表于 02-24 07:47

    DLPC350怎么才能實現(xiàn)iic通訊?

    我想通過單片機(jī)iic接口控制DLPC350,地址是0x34和0x35,然后對對應(yīng)寄存器進(jìn)行讀寫,設(shè)置的頻率是100khz,但是發(fā)現(xiàn)無法通訊上,我想知道怎么才能實現(xiàn)iic通訊?
    發(fā)表于 02-21 08:07

    使用IIC通過API給DLPC3479發(fā)送控制指令時無應(yīng)答是什么原因?qū)е碌??如何解決?

    1. 使用的是模擬IIC,通過API調(diào)用最基本的讀取DeviceID命令,但是在第一步寫地址 0x36后就沒有收到應(yīng)答信號,請問應(yīng)該怎么排查?波形圖如下,請問有什么因素可能會導(dǎo)致這個
    發(fā)表于 02-18 08:16

    DLPC3479 IIC通訊異常的原因?

    ,在發(fā)送0x36后無應(yīng)答; 3. 使用另外買的USB轉(zhuǎn)IIC模塊,無法正常連接GUI,通過工具發(fā)送指令能讀但是讀的數(shù)據(jù)對不上,有誤; 請問以上問題有可能是什么原因造成的,應(yīng)該哪些方面排查?是否有IIC能直接使用的類似GUI的
    發(fā)表于 02-18 07:04

    DLPC3479主芯片的IIC1是1.8V,與DLPC3479芯片的IIC0 3.3V直接相連,會不會導(dǎo)致主芯片IIC1引腳出現(xiàn)問題?

    在dlp4710evm-lc _sch參考原理圖里,DLPC3479主芯片的IIC1是1.8V,與DLPC3479芯片的IIC03.3V直接相連,這個會不會導(dǎo)致主芯片IIC1引腳出
    發(fā)表于 02-17 06:27

    請問DS90UB903Q的IIC工作頻率必須為100KHz嗎?

    的實際工作與配置相同;使用示波器抓取IIC讀ID的波形,發(fā)現(xiàn)IIC在寫入8位地址0xB0后,沒有ACT信號芯片返回。 請問DS90UB903Q的I
    發(fā)表于 12-26 07:08

    INA226寫寄存器的IIC波形看起來是沒有問題的,但是寫入后不生效,為什么?

    INA226芯片,寫寄存器的IIC波形看起來是沒有問題的,但是寫入后不生效,重新讀還是默認(rèn)值,請問這是什么原因??
    發(fā)表于 12-09 06:35

    MCU通過IIC口控制TLV320AIC3204,請問MCU的IIC接口和TLV320AIC3204的IIC接口對接時需要電平轉(zhuǎn)換嗎?

    MCU通過IIC口控制TLV320AIC3204,該芯片的IOVDD接1.8V,MCU的IIC上拉電平是3.3V,請問MCU的IIC接口和TLV320AIC3204的IIC接口對接時
    發(fā)表于 10-30 06:02

    IIC信號線需要增加上拉電阻,是因為IIC的IO是什么

    IIC通信中扮演著至關(guān)重要的角色,而上拉電阻的加入則是實現(xiàn)這種通信方式有效性和可靠性的關(guān)鍵。以下是對此現(xiàn)象的介紹: 一、IIC通信與開漏輸出
    的頭像 發(fā)表于 10-06 15:50 ?2107次閱讀

    IIC通信模式下,如何提高INA260測量電流的精度?

    IIC通信模式下,如何提高INA260測量電流的精度?
    發(fā)表于 08-19 06:18