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.
https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1138118/tmag5170-tmag5170
器件型号:TMAG5170大家好、我们对 TMAG5170有几个问题。
为了了解与 TMAG5170的 SPI 通信是否正常、除了测试代码外、只需满足最低应用要求即可。
Tmag_init()
{
//TMAG5170startup();
/*设备配置初始化*/
//writeToRegister (0、0、41);
/*传感器初始化*/
//writeToRegister (1、0、10);
/*系统初始化*/
//writeToRegister (2、0、99);
/*传感器设置为与 Renesas Micro 满足上述配置。
*传感器处于连续活动模式并对此感兴趣
仅角度测量
*
}
Tmag_Cyclic ()
{
/*
writeToRegister (0x13、0);
}
Q1:我们是否可以忽略 INIT 和的每次写入(器件/传感器/系统)寄存器
定期读取角度寄存器以查看 SPI 是否正常? 即我们通过
writeToRegister (0x13、0)、并在 CRC 计算和读取位最终值之后
SENT 为(0x93、0x00、0x00、0x0f)(或)需要对系统配置(0x02、0x00、0x00、CRC)进行最小写入。
Q2:测试代码表示入栈一个字节并读取 Rx 字节。是否需要发送完成(0x93、0x00、0x00、0x0f)、然后在 TMAG 之后
检查帧 CRC 并以32位响应进行响应,微型发起读取。
Q3:如何理解 Rx 帧。 我们正在发送(CMD0 =0、CMD1=0)。即使对于上述命令、也包括 STAT 位。
Q4:我们将 TMAG 与 SPI 通道的 rh850fl1 micro.in 读取寄存器(MISO)(可存储16位数据)相连并对此感兴趣
角度测量(磁体、SPI、实际器件/系统/传感器配置已就绪)。我们希望看到 SPI 数据格式正确、然后
继续发送实际配置(连续活动转换模式等)
那么、发送 command.send 0x93、0x00、然后读取 MISO 响应并发送0x00、0x0f 读取 MISO 响应的正确方法是什么?
谢谢、
P Tulasi Krishna。
P Tulasi、
Q1: 只要器件未进入深度睡眠模式或断电、就无需重新初始化配置。 器件设置完成后、您可以根据需要读取任何 SPI 寄存器、而无需发送额外的写入。
Q2:任何 TX 事件结束时的 CRC 位都需要校正 TMAG 以锁定传入数据。 在发生读取事件时、主机可通过类似的方式进行配置、以使用相同的方法检查从 TMAG 传入的 CRC。 如果一个读取被启动、TMAG 将在没有从主机接收到一个有效 CRC 的情况下将数据移出 SDO。 配置完成后、无需寄存器写入即可使 TMAG5170输出数据。
Q3:CMD0位用于触发模式、以指定是否将 SPI 触发设置为传输完成。 CMD1位用于在下一次通信期间确定 STAT[2:0]上的输出。 由于 CMD 位的时序与 STAT[2:0]重叠、因此无法在同一帧上强制执行此更新。
问题4:在采取措施完成通信结束之前、似乎您打算停止中间传输以分析前16位。 这将需要保持 CS 线路为低电平、而不会导致器件通信超时。 在此期间、SCLK 输入需要暂停以进行计算。 SDO 和 SDI 结束时的 CRC 旨在帮助确保正确的数据传输。 与 SYS_STATUS 寄存器中的 FRAME_STAT 位一起添加、验证 SPI 事务是否有效可能更容易。 如果您检测到 STAT11 = 1或 FRAME_STAT = 1、则有理由认为 SPI 帧的格式不正确。
谢谢、
Scott
您好、谢谢。
我们已经取得了一些进展、似乎我们能够与传感器进行通信。我们的连接如下所示
我们从简单的系统配置0x02、0x00、0x00、0x00开始
器件配置0x00、0x00、0x00、CRC
然后开始使用以下配置将工作模式更改为继续
0x02、0x00、0x00、0x00
器件配置0x00、0x00、0x20、0x0d
和捕获的系统状态 SPI 响应、如下所示、使用 cmd (0x8e、0x00、0x00、0x05)。已验证的 CRC 与计算出的 CRC 匹配、但似乎没有更改为活动模式
我们可以看到大多数状态寄存器的响应相同、例如0xE0、0x00、0x00、0x8A (第一行是微命令、第二行是时钟、第三行是传感器响应。在这段时间内、CS 被拉高、随后被拉高、这在图像中没有体现)。
进一步调试可能存在哪些问题。
(SPI、极性、相位、CRC、连接等)。
谢谢、
P Tulasi Krishna。
P Tulasi、
我很高兴看到您正在取得进展。 通过查看 SDO、我们可以看到以下位为1:
基于此、我预计前一帧的输入会出现 CRC 错误。 对于您共享的命令、我会得到以下 CRC 结果:
条目中的 CRC 代码与我的计算结果相匹配。
基于此、我假设您的 CRC 算法运行正常、因此接下来可能要检查的地方可能是 SPI 极性设置。 数据表指示 SDI 在 SCK 上升沿传输
该 SDO 随每个上升沿移出
根据我在示波器捕获中看到的情况、这看起来也是匹配的。 因此、我不清楚直接原因、但我们知道器件没有锁存写入、因为它检测到 CRC 故障。 我建议在每次通信时跟踪第一个位、为了进行调试、您可以尝试在第一次传输时使用以下命令禁用 CRC:
0x0F000407
器件在接收到数据时会锁存数据、并将忽略所有 CRC 故障。 如果正确接收到该值、则不应看到 STAT11变为高电平、然后应能够读回以确认寄存器设置与写入值匹配。
您能否尝试这些步骤并让我知道您获得了什么结果?
谢谢、
Scott
您好!
我们有相同的响应。为简单起见、 加电后、我刚刚写入 CRC 禁用(0x0F、0x00、0x04,0X07)一次。我已经按照下面屏幕截图中显示的系统状态连续读取命令进行了后续操作、响应与上面相同(0xe0、0x00、0x00、0x8a)。那么、我是否可以理解、传感器也不接受 CRC 禁用写入?
更多要点:
A)我仅探测时钟和传感器响应、我看到以下相同代码的结果(唯一的变化是一个探针剩余)。
这将转换为0x40、0x80、0x00、0x05。不确定它为什么与上面不同、但该帧也与计算的 CRC 和接收的 CRC 匹配。
并且没有 STAT11 (CRC 位)被置位的指示。但是0x80表示 ALERT 位被置位、并且当看到传感器的 PIN8时、它始终是高警报输出。
b)我们在 TM 上将片选(微控制器的 IO 引脚)设置为低电平。 并在 T+1ms 开始传输、并在 OS 1ms 任务中使 CS 在 T+2ms 变为高电平。
谢谢、
P Tulasi Krishna。
P Tulasi、
出现在第一条命令之后的错误代码意味着不接受 CRC 禁用。 这表明相位或极性问题很可能是由其引起的。
我在 EVM 上捕获到了有效的通信:
因此、该器件看起来希望 SDI 上的数据准备好在上升沿锁存。 请尝试更新 SPI 格式以匹配、然后重试。
谢谢、
Scott