曾經~在某年某月某日
遇過某人提供過一片 電容式 Touch Pad ,
該片電容式 Touch Pad是透過 I2C 介面控制,讀取.
也給了 電容式 Touch Pad 規格書.
規格書上草草的放了幾個 register 與描述.
但是獨缺 電容式 Touch Pad 的 I2C slave address , 很蝦...
又再要了好幾次正確資料的過程中發現,真是雞同鴨講.
所以想到不如來寫段簡單的測試程式,
自己來找該 電容式 Touch Pad 的 Slave address 好了.( 真的是求人不如求己來著 汗~ )
於是有了這份 project
拿之前在台中上課使用的 base board做測試.
確實找到 base board上的 兩個 I2C Device ( LM75 0x9E 以及 BMA250 0x30 )的 Slave address.
主要的 code 如下
這邊使用一個 loop 依順序,從 0x02 每次加上 2 (只檢查 write) 做 Slave ack 確認.
若有 ack 反應就判為 I2C Bus上存在這個 Slave address.
至於如何判定是否有 Ack,
參考 User Manual
則放在 I2C_IRQHandler 中以下兩段 code.
Bus 上對 slave address 有 ack
Bus 上對 slave address Nack
就這樣...
試試看你的 I2C Bus 上有哪些 slave device 吧..
從這裡下載 project Download page
遇過某人提供過一片 電容式 Touch Pad ,
該片電容式 Touch Pad是透過 I2C 介面控制,讀取.
也給了 電容式 Touch Pad 規格書.
規格書上草草的放了幾個 register 與描述.
但是獨缺 電容式 Touch Pad 的 I2C slave address , 很蝦...
又再要了好幾次正確資料的過程中發現,真是雞同鴨講.
所以想到不如來寫段簡單的測試程式,
自己來找該 電容式 Touch Pad 的 Slave address 好了.( 真的是求人不如求己來著 汗~ )
於是有了這份 project
拿之前在台中上課使用的 base board做測試.
確實找到 base board上的 兩個 I2C Device ( LM75 0x9E 以及 BMA250 0x30 )的 Slave address.
主要的 code 如下
temp_add = 0x02;
while(1)
{
I2CCount = 0;
I2CReadLength = 0;
I2CWriteLength = 1;
I2CMasterBuffer[0] = temp_add;
I2CEngine();
switch(I2CCount)
{
case 0x18:
printf("Find I2C slave address = %x, \n",temp_add);
yes++;
break;
case 0x20:
no++;
break;
default:
break;
}
if(temp_add == 0xfe)
{
printfs("\n");
printfs("Finished !\n");
break;
}
temp_add += 2;
}
這邊使用一個 loop 依順序,從 0x02 每次加上 2 (只檢查 write) 做 Slave ack 確認.
若有 ack 反應就判為 I2C Bus上存在這個 Slave address.
至於如何判定是否有 Ack,
參考 User Manual
則放在 I2C_IRQHandler 中以下兩段 code.
case 0x18: /* Regardless, it's a ACK */
I2CCount = 0x18;
Bus 上對 slave address 有 ack
case 0x20: /* regardless, it's a NACK */
I2CCount = 0x20;
Bus 上對 slave address Nack
就這樣...
試試看你的 I2C Bus 上有哪些 slave device 吧..
從這裡下載 project Download page
我讓 LPC1343 模仿 EEPROM 24C16 當 I2C slave device, 結果 連續接收二筆資料,第一筆常會丟失, 但第二筆則是穩定正常.
回覆刪除可以在具體的描述 一筆是指 一串資料還是第一個byte?
刪除我使用起來沒遇過lose資料。 遇到這種問題比較難隔空把脈就是了。