|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
I2C問題 |
| 作者:ttdjl 欄目:ARM技術(shù) |
void __irq IRQ_I2C(void) { /* 讀取I2C狀態(tài)寄存器I2DAT */ /* 按照全局變量的設(shè)置進(jìn)行操作及設(shè)置軟件標(biāo)志 */ /* 清除中斷邏輯,中斷返回 */ SWITCH (I2STAT & 0xF8) { /* 根據(jù)狀態(tài)碼進(jìn)行相應(yīng)的處理 */ case 0x08: /* 已發(fā)送起始條件 */ /* 主發(fā)送和主接收都有 */ /* 裝入SLA+W或者SLA+R */ if(I2C_suba_en == 1)/* SLA+R */ /* 指定子地址讀 */ { I2DAT = I2C_sla & 0xFE; /* 先寫入地址 */ } else /* SLA+W */ { I2DAT = I2C_sla; /* 否則直接發(fā)送從機(jī)地址 */ } /* 清零SI位 */ I2CONCLR = (1 << 3)| /* SI */ (1 << 5); /* STA */ break; case 0x10: /*已發(fā)送重復(fù)起始條件 */ /* 主發(fā)送和主接收都有 */ /* 裝入SLA+W或者SLA+R */ I2DAT = I2C_sla; /* 重起總線后,重發(fā)從地址 */ I2CONCLR = 0x28; /* 清零SI,STA */ break; 1、在LPC213X的I2C例程中,為何I2C總線都需要重復(fù)起始條件? 2、在08H狀態(tài)下讀數(shù)據(jù),發(fā)送起始條件的時候?yàn)楹伟裄/W置0, I2DAT = I2C_sla & 0xFE; /* 先寫入地址 */ 我現(xiàn)在碰到的問題是,使用LPC2138讀X1288內(nèi)的EEPROM時,有時會發(fā)生從器件不回ACK的問題。 用邏輯分析儀分析可能是由于發(fā)送第一次器件地址的時候當(dāng)作是讀數(shù)據(jù),而此時X1288內(nèi)部的WEL是不確定的,有可能為低時不應(yīng)答。難道我一定要用模擬I2C總線? |
| 2樓: | >>參與討論 |
| 作者: lpc2000 于 2006/6/1 23:59:00 發(fā)布:
有時I2C器件是會怪怪的 幾樣?xùn)|西可以考慮: 上拉電阻小點(diǎn)試試 時鐘弄慢點(diǎn) 或什么也別干,先送20到80個時鐘 |
|
| 3樓: | >>參與討論 |
| 作者: hotpower 于 2006/6/2 0:13:00 發(fā)布:
I2C是一個較完善的協(xié)議 細(xì)節(jié)要自己把握... |
|
| 4樓: | >>參與討論 |
| 作者: LPCfAnS 于 2006/6/2 7:41:00 發(fā)布:
尿童是測試班?謝謝... |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |