Arduino I2C线路主机可用读取输出-1 255,如果从机发送更少的字节

时间:2014-05-01 11:55:45

标签: arduino i2c

我试过这个例子: http://arduino.cc/en/Reference/WireRead

但是如果我从从机发送少于6个字节,主机仍然会尝试读取所有6个字节,然后读取功能输出-1/255。实际上,在这种情况下,可用函数实际上是无用的,我宁愿使用for到6。

知道我做错了什么或者我怎么能解决这个问题?我不能简单地只过滤所有255个值,因为有时我发送它们。我只是不明白这里的图书馆行为。

编辑:奇怪的是read函数返回一个int,而不是一个byte。所以我可以看到它是-1还是255.而它的确定为255而不是-1。如果我尝试读取7次而不是使用可用功能,则最后读数为-1。奴隶是否发送了错误的字节,或者我可能需要上拉或最新发生什么?

我的解决方案是读取,直到读取为-1而不是使用可用功能。但必须有另一种解决方案。

1 个答案:

答案 0 :(得分:0)

虽然这似乎很尴尬,但这是预期的行为。 I2C协议1不提供从设备的任何方式来结束所请求的传输。 长度仅由quantity的{​​{1}}参数定义。这样主设备决定并且必须知道从设备将发送多少字节。 Wire.requestFrom仅表示是否达到先前给定的长度。

要提供可变长度的消息,您可以为字符串传输选择分隔符字符,如Wire.available,或者在消息前加上一个存储后续字节数的字节,如果达到了告知的数量,则停止读取。< / p>