|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助!I2C器件的熱插拔問(wèn)題! |
| 作者:kuliuyisi 欄目:通信技術(shù) |
通過(guò)USB接口芯片AN2131的I2C接口往I2C從部件發(fā)送數(shù)據(jù),I2C從部件采用I2C I/O擴(kuò)展芯片PCA9501,該器件支持熱插拔,但是USB固件下載完畢,再把I2C從部件插到I2C總線上后,USB通過(guò)I2C發(fā)送數(shù)據(jù)失敗,為什么? |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/6 14:07:00 發(fā)布:
I2C的熱插拔并不是真正的熱插拔 與USB不同,I2C只能做到硬件準(zhǔn)許熱插拔,但軟件加載無(wú)法自動(dòng)實(shí)現(xiàn),I2C標(biāo)準(zhǔn)中沒(méi)有相關(guān)內(nèi)容,你需要在底層引入直接控制才行。 |
|
| 3樓: | >>參與討論 |
| 作者: yewuyi 于 2007/5/6 14:45:00 發(fā)布:
嘿嘿,SCL/SDA鎖死的問(wèn)題又來(lái)了…… |
|
| 4樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/6 22:27:00 發(fā)布:
我使用PCA9511這樣的支持熱插拔的I2C緩沖器行嗎? 加了緩沖器后,在熱插拔時(shí),對(duì)總線電容沒(méi)有大的影響,就可支持熱插拔了,軟件還會(huì)出現(xiàn)2樓所說(shuō)的軟件無(wú)法自動(dòng)加載嗎?我該如何做才能實(shí)現(xiàn)真正的熱插拔呢? |
|
| 5樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/7 7:47:00 發(fā)布:
USB規(guī)范已要求了軟件的自動(dòng)加載 但I(xiàn)2C沒(méi)有,你得自己在底層編程才行,否則僅能保證物理熱插拔不會(huì)損壞器件,但無(wú)法實(shí)現(xiàn)功能上的熱插拔,這還需軟件的支持,PC平臺(tái)本身是不夠的。 |
|
| 6樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/7 12:23:00 發(fā)布:
I2C的底層編程指的是什么? 是不是在底層控制SCL、SDA,比如SCL高電平時(shí)SDA的下降沿啟動(dòng)傳輸?shù)冗@樣的控制嗎?還需要什么軟件的控制?為何PC平臺(tái)本身不夠? 能否這樣實(shí)現(xiàn)I2C的熱插拔:插上I2C器件后,利用USB的控制寄存器模擬一次斷電,然后重枚舉的過(guò)程,這樣是不是就相當(dāng)于不是熱插拔了?不知道不是實(shí)際斷開(kāi)連接然后重新加載USB固件行不行。 您有沒(méi)有什么好的建議呢?謝謝! |
|
| 7樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/7 16:21:00 發(fā)布:
I2C不能自動(dòng)偵測(cè)新“終端”的接入 得用軟件不斷偵聽(tīng)或加入自動(dòng)檢測(cè)電路,在檢測(cè)到新終端接入后才加載固件程序。 |
|
| 8樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/7 19:28:00 發(fā)布:
謝謝,您讓我了解了問(wèn)題的原因及解決辦法 但是我現(xiàn)在只是知道需要用軟件偵聽(tīng)或加入自動(dòng)檢測(cè)電路,但是如何偵聽(tīng)及如何加入自動(dòng)檢測(cè)電路還是很茫然,您能告訴我具體該如何做嗎?或者有沒(méi)有示例? 你說(shuō)檢測(cè)到新終端接入后才加載固件程序,這個(gè)固件程序是指USB的固件程序嗎? |
|
| 9樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/7 20:02:00 發(fā)布:
具體方法需要好好研究一下器件 器件手冊(cè)上應(yīng)有詳細(xì)時(shí)序描述,如果不能通過(guò)器件本身解決問(wèn)題,最好的方法是引入一附加的MCU,而用MCU解決的方法思路就很多了,比如該MCU作為I2C的中介或者用MCU來(lái)偵測(cè)新接入的I2C設(shè)備等等。 |
|
| 10樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/7 21:49:00 發(fā)布:
器件本身應(yīng)該是不行的 USB通過(guò)I2C發(fā)送數(shù)據(jù)的過(guò)程本來(lái)就符合I2C規(guī)范,I2C從器件也符合I2C規(guī)范,器件本身還有什么好研究的? 通過(guò)MCU偵聽(tīng)倒是可行的方案,USB接口芯片AN2131本身就帶一個(gè)8051,但是不知道如何偵聽(tīng)新接入的I2C從器件,反正是不能再通過(guò)I2C接口發(fā)送數(shù)據(jù)來(lái)偵聽(tīng)了,愿聞其詳! |
|
| 11樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/7 22:40:00 發(fā)布:
用MCU通過(guò)代碼不斷進(jìn)行主動(dòng)查詢(xún),判斷是否有特定數(shù)據(jù)返回即可 |
|
| 12樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/8 12:57:00 發(fā)布:
通過(guò)MCU去查詢(xún),從器件會(huì)返回什么數(shù)據(jù)呢? 所有的從器件(I2C I/O擴(kuò)展器件PCA9501)都僅僅通過(guò)SCL、SDA兩根線和MCU相連,MUC要去主動(dòng)查詢(xún)數(shù)據(jù),也必須通過(guò)這兩根線,即MCU需要通過(guò)其I2C接口或使用I/O模擬I2C往總線上發(fā)數(shù)據(jù),也需要根據(jù)I2C規(guī)范來(lái)發(fā),還是輸入熱插拔的情況,行不通吧!再說(shuō)我使用的PCA9501是接收I2C數(shù)據(jù)然后轉(zhuǎn)換成8位并行數(shù)據(jù)輸出,相對(duì)于MCU而言,該器件僅僅是接收,能返回什么數(shù)據(jù)給MCU呢? 我有兩個(gè)方法,不知道行不行 1、控制AN2131QC模擬一次斷電的過(guò)程,復(fù)位。這種情況輸入軟復(fù)位或硬復(fù)位的過(guò)程,固件應(yīng)該在一上電就下載了,也許再?gòu)?fù)位也不行。 2、使用一個(gè)繼電器,MCU通過(guò)I/O控制繼電器,一旦I2C從器件插上后,先斷開(kāi)繼電器,然后再閉合,就是一次真正的斷電-上電-固件下載的過(guò)程了,每插一個(gè)從器件都進(jìn)行此過(guò)程,應(yīng)該是可行的吧,呵呵。是不是很笨的辦法? |
|
| 13樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/8 13:38:00 發(fā)布:
你沒(méi)有理解而已 MCU作為I2C的主設(shè)備,平時(shí)不斷發(fā)起對(duì)從設(shè)備的通訊,如果從設(shè)備不存在,返回的數(shù)值永遠(yuǎn)是IO的固定偏置,而從設(shè)備一旦接到I2C上,返回的就不再是原值了,然后據(jù)此將I2C轉(zhuǎn)交給USB即可。 |
|
| 14樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/9 12:48:00 發(fā)布:
可是我的I2C總線上接了很多個(gè)從部件啊 在一個(gè)從部件往總線上插的時(shí)候,上邊可能已經(jīng)存在很多從部件了,這時(shí)返回的數(shù)據(jù)還有什么不同嗎? |
|
| 15樓: | >>參與討論 |
| 作者: computer00 于 2007/5/9 13:25:00 發(fā)布:
I2C設(shè)備不是有地址的么?地址不對(duì),沒(méi)有設(shè)備會(huì)響應(yīng)的 所以你查詢(xún)的時(shí)候,即便有其它設(shè)備,它們也不會(huì)應(yīng)答的。找個(gè)講I2C協(xié)議的手冊(cè)好好看看吧. |
|
| 16樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/9 13:42:00 發(fā)布:
樓上所言正確 樓主必須針對(duì)熱插拔的那個(gè)設(shè)備編程。 |
|
| 17樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/9 23:01:00 發(fā)布:
看來(lái)只能加一個(gè)額外的MCU了 不過(guò)我還是不想額外加一個(gè)MCU,還是想通過(guò)軟件上解決問(wèn)題。 在每個(gè)從部件上都加一個(gè)I2C緩沖器不知道行不行。 |
|
| 18樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/9 23:12:00 發(fā)布:
在總線上和每個(gè)I2C從器件上都加一個(gè)I2C緩沖器應(yīng)該可行吧! 看如下內(nèi)容: 熱插拔I2C和SMBus緩沖器PCA9513和PCA9514主要應(yīng)用在cPCI、VME、AsvancedTCA卡和需要從操作系統(tǒng)中熱插拔的其他多點(diǎn)背板,能允許I/O卡能直接插入帶電的背板而不會(huì)對(duì)數(shù)據(jù)和時(shí)鐘總線有影響,提供雙向緩沖,保持背板和卡電容絕緣。 對(duì)于PICMG背板應(yīng)用,在用上拉電阻的情況下,PCA9513向SCLIN和SDAIN提供92μA的電流源。當(dāng)卡插入和拔出時(shí),包括電流源在內(nèi)的RC時(shí)間常數(shù)保持不變。只要引腳電壓大于Vcc,電流源就是高阻抗的。 也就是說(shuō)采用了緩沖器后是可以實(shí)現(xiàn)熱插拔的,既然不會(huì)對(duì)數(shù)據(jù)和時(shí)鐘造成什么影響,軟件也就能實(shí)現(xiàn)熱插拔了,還需要底層控制什么呢?不知道我理解的對(duì)不對(duì)! |
|
| 19樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/10 10:06:00 發(fā)布:
你還是沒(méi)有理解 加緩沖器何益?導(dǎo)致問(wèn)題的本質(zhì)你還是沒(méi)有理解,你怎么能讓主設(shè)備知道某個(gè)從設(shè)備是否加載了。 |
|
| 20樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/10 12:44:00 發(fā)布:
我的I2C從部件僅僅是接收數(shù)據(jù),主機(jī)怎么會(huì)知道呢? 具體我的應(yīng)用而言: 我的I2C從設(shè)備僅僅是接收USB單片機(jī)發(fā)送的數(shù)據(jù),沒(méi)有返回任何數(shù)據(jù),即使沒(méi)有熱插拔,主設(shè)備就知道從設(shè)備已經(jīng)加載了嗎?應(yīng)該還是熱插拔的時(shí)候?qū)е碌腟CL、SDA復(fù)位導(dǎo)致的,既然加了緩沖器可以避免這個(gè)問(wèn)題,就不該出現(xiàn)I2C發(fā)送數(shù)據(jù)錯(cuò)誤了吧! 請(qǐng)賜教! |
|
| 21樓: | >>參與討論 |
| 作者: chunyang 于 2007/5/10 13:25:00 發(fā)布:
你前面應(yīng)該先說(shuō)清楚 從你前面的描述可以推知一個(gè)事實(shí):你已經(jīng)采用了物理上支持熱插拔的器件,那就不會(huì)因熱插拔行為本身導(dǎo)致器件的異常,只是因I2C主設(shè)備發(fā)出的通訊指令未獲響應(yīng)而導(dǎo)致軟件死鎖。而單向設(shè)備的情況完全不同,你不說(shuō)就不要指望別人能自動(dòng)獲知你的條件和前提。 I2C接口本身不支持熱插拔,其本質(zhì)不是因?yàn)槲锢矸矫娴脑蚨且驗(yàn)橥ㄓ嵄旧硪。熱插拔先要通知主機(jī)從設(shè)備的接入,然后由主設(shè)備發(fā)起連接,I2C無(wú)此設(shè)計(jì),故才需反復(fù)查詢(xún)從設(shè)備的響應(yīng)來(lái)判別熱插拔行為的有無(wú)。單向通訊比較簡(jiǎn)單,但仍需偵測(cè)從設(shè)備的連接,這時(shí)當(dāng)然不能靠響應(yīng)而是得靠諸如電源監(jiān)測(cè)、端口狀態(tài)等手段輔助實(shí)現(xiàn),然后才能發(fā)起通訊。當(dāng)然,更簡(jiǎn)單的方法是不管是否存在從設(shè)備,主設(shè)備自己?jiǎn)为?dú)操作就是,但這樣很容易出錯(cuò),只適合特殊應(yīng)用,USB端的固件程序也得因此修改配合。 正確的提問(wèn)非常重要,前提、條件等要給足,否則將徒然浪費(fèi)時(shí)間。 |
|
| 22樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/10 21:28:00 發(fā)布:
謝謝chuangyang,確實(shí)是我沒(méi)有說(shuō)清楚! 不過(guò)從前面chuangyang及他人的回答中我也學(xué)習(xí)了不少東西! |
|
| 23樓: | >>參與討論 |
| 作者: kuliuyisi 于 2007/5/11 12:29:00 發(fā)布:
像我這種情況到底如何解決呢? 在每個(gè)從部件的邊緣和AN2131的接口處各加緩沖器的方案行嗎? |
|
| 24樓: | >>參與討論 |
| 作者: tt 于 2007/6/13 15:39:28 發(fā)布:
你們?cè)谟懻撌裁矗?/P> |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |