做嵌入式开发的小伙伴们,有福利了!
当遇到调试过程中遇到难题,我们往往会找手册,上网搜索,找FAE来解决, 现在有了ChatGPT,尝试问了下调试的问题,如下
首先我的问题描述:
当设置 MCMCAN 控制器模式时,当 CCCRi.INT 被设置为 NORMAL 时,什么会导致 TC377 cpu PSRi 寄存器 ACT 位未从同步变为空闲?
ChatGPT:
TC377 CPU 是一个复杂的系统,在设置 MCMCAN 控制器模式时,PSRi 寄存器 ACT 位没有从同步变为空闲可能有多种原因。但是,以下是可能导致此行为的一些可能原因:
1. 未启用中断:MCMCAN 控制器需要启用中断才能使 PSRi 寄存器从同步变为空闲。如果未启用中断,则 ACT 位将保持在同步状态。
2. MCMCAN 控制器未正确初始化:MCMCAN 控制器需要正确初始化才能开始发送和接收消息。如果控制器没有正确初始化,它可能无法转换到空闲状态。
3. MCMCAN 控制器配置不正确:MCMCAN 控制器有各种配置参数需要正确设置以确保正常运行。如果这些参数设置不正确,控制器可能无法转换到空闲状态。
4.总线争用:如果 CAN 总线上存在总线争用,则 MCMCAN 控制器可能无法完成其初始化序列,这可能会阻止其转换为空闲状态。
5. 硬件问题:TC377 CPU 或 MCMCAN 控制器可能存在硬件问题,阻止 ACT 位转换为空闲状态。
要确定问题的根本原因,可能需要执行进一步的分析,例如调试软件或检查硬件设置。
继续追问:
第一条原因的基本原理是什么?
ChatGPT:
当然,我很乐意解释我提到的第一个可能原因背后的基本原理。
当有新数据要传输或接收时,MCMCAN 控制器会产生中断以向 CPU 发出信号。中断允许 CPU 快速响应新数据并启动必要的处理。 TC377 CPU 中的 PSRi 寄存器指示 MCMCAN 控制器的当前状态,包括它是空闲还是正在同步。
当 MCMCAN 控制器在初始化或同步过程中时,PSRi 寄存器中的 ACT 位将被设置为同步状态。一旦控制器完成初始化并准备好发送或接收数据,ACT 位应转换为空闲状态。
但是,如果不启用中断,CPU 将无法响应 MCMCAN 控制器的中断请求。因此,MCMCAN 控制器可能无法完成其初始化序列,并且 ACT 位可能会停留在同步状态。
因此,启用中断是确保 MCMCAN 控制器可以正确运行以及 PSRi 寄存器可以转换为空闲状态的关键步骤。通过启用中断,CPU 将能够接收和响应 MMCCAN 控制器的中断请求,从而使其完成初始化序列并转换到空闲状态。
继续深入:
能给我关于第二个原因的更多信息吗?(第二个原因即“未正确初始化”)
ChatGPT:
当然!以下是我提到的第二个可能原因的更多详细信息:
MCMCAN 控制器需要正确初始化才能开始发送和接收消息。初始化通常涉及配置控制器的寄存器、设置消息对象以及配置 CAN 总线的时钟和波特率设置。如果这些步骤中的任何一个没有正确执行,控制器可能无法转换到空闲状态,并且 PSRi 寄存器的 ACT 位可能会停留在同步状态。
要诊断问题是否与 MCMCAN 控制器初始化有关,您可以尝试以下步骤:
1. 验证 MCMCAN 控制器是否已正确启用和配置以进行操作。
2. 确保 CAN 总线的时钟和波特率设置正确。
3. 检查消息对象是否已正确初始化并在应用程序代码中正确使用。
4. 确保软件正确配置控制器的寄存器,尤其是那些与初始化相关的寄存器。
5. 检查总线是否正确终止,并且不存在总线争用或其他与硬件相关的问题。
通过验证 MCMCAN 控制器是否已正确初始化并且没有与硬件或软件相关的问题,您可以帮助确保 PSRi 寄存器的 ACT 位将按预期转换为空闲状态。
继续...
如何验证始终和波特率被正确配置?
ChatGPT:
要验证 CAN 总线的时钟和波特率设置是否已正确设置,您可以执行以下步骤:
1. 检查 CAN 模块的时钟控制寄存器 (CCR) 中的设置。CCR 控制 CAN 模块的时钟源和频率,用于生成 CAN 总线的波特率。确保 CCR 设置与 CAN 模块所需的时钟源和频率一致。
2. 计算 CAN 总线上使用的实际波特率。实际波特率 c 可以根据位时序寄存器 (BTR) 中使用的位时序设置来计算。 BTR 设置控制 CAN 总线信号的时序,并取决于所需的波特率、时钟频率和采样点。
3.验证计算出的实际波特率是否与所需的波特率匹配。如果计算出的实际波特率与所需波特率明显不同,则时钟或波特率设置可能存在问题。
4. 使用示波器或 CAN 总线分析仪来验证 CAN 总线信号的波形。波形应与所需波特率和位时序设置的预期波形相匹配。如果波形与预期波形不匹配,则时钟或波特率设置可能存在问题。
根据ChatGPT的指引,我检查了中断注册、CAN的时钟配置、波特率、以及CAN controller的邮箱配置,通过观察初始化后的相关寄存器,未发现时钟或波特率配置问题。排除了总线被占用问题。问题的排查防线就到了CAN 控制器与通信的同步机制上。
用示波器测量CAN收发器的EN和STB_N管脚,分别是高和低,再通过CANOE上位机发送报文去测量RX TX管脚,发现都是持续的低信号,没有任何信号。去查看CAN收发器的手册,发现收发器的工作模式设置出现问题,如果要让收发器处于Normal的工作模式,需要EN和STB_N管脚都置HIGH。
改了STB_N管脚为HIGH后,上位机发报文,测量RX管脚,出现了信号,此时再去观测PSRi.ACT位,在CCCRi.INIT变为Normal后,PSRi.ACT位立即变为了Idle。
问题得到解决!