NXP MCU 技术论坛
直播中

刘强

7年用户 1198经验值
私信 关注
[问答]

如何使用LPC55S36在目标模式下实现读取操作?

我们正在尝试使用 LPC55S36 在目标模式下实现读取操作。为此,我们在控制器模式下使用另一个 LPC55S36,它初始化总线(处理 DAA),向目标写入 6 个字节的数组,然后从中读取 6 个字节。测试正确的目标读取操作的想法是查看(使用逻辑 Saleae 嗅探器)写入(由控制器读取)的数据与先前读取(由控制器写入)的数据相同,使用共享缓冲区处理来自两者的数据交易。

到目前为止,我们在使用不同的 CCC(如 RSTDAA、SETDASA、ENTDAA、SETMRL、GETMRL)方面没有遇到任何问题。它们返回我们之前在各自寄存器中初始化期间设置的数据(如果是这样的话),我们可以使用嗅探器看到正确的操作。
对于写入操作(控制器读取),我们也没有发现任何问题。如果我们在目标初始化期间在代码中指定一个数组,然后使用 I3C_SINTMASKED_TXSEND_MASK 中断以及 SWDATAB 和 SWDATABE 寄存器将其写入总线,我们可以使用嗅探器在总线上看到正确的字节。

现在,目标读取操作的问题是,虽然我们在嗅探器中看到控制器写入操作(使用正确的数据正确启动和完成),但数据似乎没有正确保存在数组上。当控制器在下一次操作中从目标读取数据时,返回的是初始化时初始设置的数据,而不是控制器实际写入的数据。
考虑到写入操作(控制器读取)单独工作正常,我们得出结论是读取操作(控制器写入)有问题。

我没有在数据表中看到太多关于在目标模式操作期间触发的中断的解释,就像在控制器模式下工作时一样。我以 SDK 示例作为参考,试图复制他们在那里所做的初始化。我的主要区别是我的驱动程序回调检查 SINTMASKED 寄存器而不是 SSTATUS 寄存器,但我认为这没有任何区别。I3C_SINTMASKED_MATCHED_MASK 是否在读取或写入事务期间触发,有没有办法在实际事务之前知道它是什么(读取或写入)?


更多回帖

发帖
×
20
完善资料,
赚取积分