|
|
发表于 2014-5-19 11:35:21
|
显示全部楼层
tudou_nangua 发表于 2014-5-19 09:16 
我试试在我slave用一个地址map模式看看,16位的是slave芯片的内存地址。比如0x9030之类的
你指slave芯片的内存地址, 是否指要讀取的地址 (例如 記憶體 at24c256), 而不是 i2c 地址?
Wire.beginTransmission 只是用來打開通訊之門, 由於可以有多個設備共用線路, 那個地址只是設備的 ID.
如果你要讀取芯片內存地址, 應該是先用 Wire.beginTransmission 打開通訊, 再用 Wire.send(MSB), Wire.send(LSB) 將 16 bit 的地址分成兩個 8bit 資料 送出去.
以下是一個簡單的例子:
- byte rdata;
- Wire.beginTransmission(deviceaddress);
- Wire.send((int)(eeaddress >> 8)); // MSB
- Wire.send((int)(eeaddress & 0xFF)); // LSB
- Wire.endTransmission();
- Wire.requestFrom(deviceaddress,1);
- if (Wire.available()) rdata = Wire.receive();
复制代码
其中, deviceaddress 是 8 bit 的 設備地址, 而 eeaddress 是 16bit 的芯片內存地址.
|
|