极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 32856|回复: 5

I2C通信的问题

[复制链接]
发表于 2017-11-22 01:03:55 | 显示全部楼层 |阅读模式
我现在想让1号机(地址为1),从3号机上读取数据。

3号机里写了2行输出语句:
Wire.write(2);
Wire.write(3);

然后1号机里读取3号机:
Wire.requestFrom(3, 1);


结果只能读取到 2. 怎么写才能得到3呢?

Wire.write()不能多次使用?需要把输出的参数拼接一次输出?还是说Wire.requestFrom(3, 1);这句的参数不正确?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-11-24 10:01:34 | 显示全部楼层
Wire.requestForm 的參數是  

Wire.requestFrom(SLAVE_ADDRESS, DATA_SIZE);


你現在 requestForm(3,1) 是向 slave address = 3 的設備請求 1 個 數據.

在 Wire.read 前後加上 Wire.beginTransmission(SLAVE_ADDRESS);  及 Wire.endTransmission();


而 Slave 要在 Wire.onRequest event 才發送.
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-11-24 14:02:41 | 显示全部楼层
Super169 发表于 2017-11-24 10:01
Wire.requestForm 的參數是  

谢谢! 之前我没加,现在改成这样可以了。
      Wire.beginTransmission(1);  
      Wire.write(rx.header);
      Wire.write(rx.byte1 & 0xF);
      Wire.write(rx.byte2);  
      Wire.write(rx.byte3);  
      Wire.endTransmission();
回复 支持 反对

使用道具 举报

发表于 2017-11-24 14:26:27 | 显示全部楼层
Stormer 发表于 2017-11-24 14:02
谢谢! 之前我没加,现在改成这样可以了。
      Wire.beginTransmission(1);  
      Wire.write(rx.he ...

在這裡其實我也有點不肯定.  wire.beginTransmission 是否應該在 master 上執行.

以我的理解, i2c bus 應該是由 master 主導的, 所以, 必須由 master 去啟動 transmission.
所以我的做法, 是在 master 執行.  

但你的程式, 應該是 1 號機是 master 吧.  因為沒完整的程式, 只能從中推測, 應該只有 master 可以執行 requestForm.

那你最後改的, 就變成是從 slave 上進行 beginTransmission, 這裡我有點保留.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-24 16:28:48 | 显示全部楼层
Super169 发表于 2017-11-24 14:26
在這裡其實我也有點不肯定.  wire.beginTransmission 是否應該在 master 上執行.

以我的理解, i2c bus ...

刚看了下我之前写的问题,我回复里没说清,1号机的代码现在也改了,已经不用requestFrom()了。3号机发送信息给1号机,1号机触发Wire.onReceive(xxx)。 这样就OK了。
回复 支持 反对

使用道具 举报

发表于 2020-12-14 19:16:14 | 显示全部楼层
Stormer 发表于 2017-11-24 16:28
刚看了下我之前写的问题,我回复里没说清,1号机的代码现在也改了,已经不用requestFrom()了。3号机发送 ...

大神  可以帮我看看我的I2C通信问题吗?谢谢了
传送门:https://www.geek-workshop.com/thread-39910-1-1.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 10:28 , Processed in 0.039087 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表