您好!
基本 Q 是我是否正确设置 eUSCI、因为每当我读取一个字节时、从器件返回两个字节。 读取世卫组织 I 寄存器0xF、结果是需要0x3D。
这是从 SensorHub 项目中借用的代码。
我对 UCASTP_0、1等和 UCB0TBCNT 值的用法感到困惑。 在写入从器件地址时、我如何使用这些地址、将寄存器地址设置为红色、将返回的数据写入一个字节?
问题可能不是152H、而是 LIS3MDL 中的问题。
感谢您查看此帖子。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
基本 Q 是我是否正确设置 eUSCI、因为每当我读取一个字节时、从器件返回两个字节。 读取世卫组织 I 寄存器0xF、结果是需要0x3D。
这是从 SensorHub 项目中借用的代码。
我对 UCASTP_0、1等和 UCB0TBCNT 值的用法感到困惑。 在写入从器件地址时、我如何使用这些地址、将寄存器地址设置为红色、将返回的数据写入一个字节?
问题可能不是152H、而是 LIS3MDL 中的问题。
感谢您查看此帖子。
Ken 您好、
[引用用户="Ken Ward"]
我对 UCASTP_0、1等和 UCB0TBCNT 值的用法感到困惑。 在写入从器件地址时、我如何使用这些地址、将寄存器地址设置为红色、将返回的数据写入一个字节?
[/报价]
这些值用于定义您是希望器件自动处理发送停止条件、还是希望自己执行、如您发布的示例所示。
我建议详细阅读 TRM 第12.3节的相关部分: http://www.ti.com/lit/ug/slau506/slau506.pdf
12.3.4、12.3.5.2和12.3.8等章节可能会对您当前的一些问题有所帮助。
关于获得额外的数据字节、我不喜欢您的流程的一件事是、您在将 UCB0CTL1设置为"读取操作"之前发送重复起始值。 我将反转该序列、看看它是否修复了额外的字节。
您好 Ralph、
已尝试您建议的交换、以便 RepeatedStart 指令现在遵循 Read 指令;无更改。 当我只需要一个时、从从器件到主器件仍会获得两个字节。
用红色标记您建议的部分。 因为我要做的是:
1.创建起始条件,用 W 位发送从属地址,期待收到背包
2.将 reg 的 addr 转至所需的位置,以便阅读,期待收到一个背包
3.创建重复起始,发送带有 R 位的从属设备地址,期望收到袋
从器件发送请求地址处的字节
5、现在我已经完成了、创建了 MNAK 和 STOP 条件
也许我可以设置 UCBxTBCNT = 4 (3字节 TX + 1字节 Rx)、其中 UCBxCTLW1 = UCASTP_1 (因为我希望在 Rx 数据字节后停止)。 计数器和停止计数器的正确用法吗?
这是我的代码片段:
感谢您花时间了解这一点!
Ken 您好、
[引用 USER="Ken Ward ]\n 也许我可以设置 UCBxTBCNT = 4 (3字节 TX + 1字节 Rx)、其中 UCBxCTLW1 = UCASTP_1 (因为我希望在 Rx 数据字节后停止)。 计数器和停止计数器的这种正确用法吗?[/quot]
我不确定 UCBxTBCNT 是否会像这样工作。 虽然听起来可以同时用于 TX 和 RX、但我认为它不会像您描述的那样对 TX+RX 字节进行计数。 您可以对其进行测试并查看吗?
我想此时、您需要使用一个示波器、或者理想情况下需要一个逻辑状态分析器、查看 I2C 线路并查看通信方面的情况。 调试 I2C 时、我从未有幸尝试"盲目"地对代码进行调试、只有查看 SDA/SCL、问题才会变得明显。 我建议您继续执行此操作。