红鲤789 2024-03-01 11:30 采纳率: 0%
浏览 122
已结题

英飞凌TC387使用MCAL唤醒TJA1145问题

  1. 配置QSPI后使用例程中的
uint8 MCAddr_Buffer[2] = {0x02,0x07};
uint8  Addr_Buffer[2] = {0x0};

Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,(uint8 *) &MCAddr_Buffer[0]);

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
while((Spi_GetSequenceResult(SpiConf_SpiSequence_SpiSequence_0) != SPI_SEQ_OK)
          &&(SPI_JOB_OK == Spi_GetJobResult(SpiConf_SpiJob_SpiJob_0)))
{
    /* Wait till write is finished */
}
Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_0,(uint8 *) & Addr_Buffer[0]);

配置TJA1145的Mode Control寄存器为Normal模式,无法唤醒,。而且Spi读回来的数据也有问题,改变时钟源和时钟频率也没有用,麻烦问一下是否还有什么地方是我遗漏的

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-01 11:31
    关注
    获得0.75元问题酬金

    引自免费微信小程序:皆我百晓生

    在您的问题中,您提到使用英飞凌TC387通过MCAL配置TJA1145(一个CAN收发器)的Mode Control寄存器为Normal模式,并尝试唤醒它,但未能成功,并且SPI读取的数据也有问题。从您提供的代码片段来看,似乎是在通过QSPI接口与TJA1145进行通信以修改其内部寄存器。

    为了更准确地解决您的问题,请注意以下几点:

    1. 初始化和配置

      • 确保QSPI接口已经正确初始化并配置了合适的时钟源、频率、极性和相位等参数。
      • TJA1145的SPI模式控制可能需要特定的命令序列或特殊寄存器地址来进入配置模式,然后才能写入Mode Control寄存器。
    2. 地址确认

      • 根据TJA1145的数据手册检查Mode Control寄存器的地址是否正确。在您给出的代码中,MCAddr_Buffer[0]MCAddr_Buffer[1] 应该组合成正确的寄存器地址。
    3. 数据有效性

      • 正确设置要写入Mode Control寄存器以激活Normal模式的值,确保这个值符合TJA1145的数据手册规定。
    4. SPI通信流程

      • 您应该首先发送一个使能写操作的命令字节,然后再发送Mode Control寄存器地址和相应的数据。
      • 在执行Spi_WriteIB之后,确实需要等待传输完成,但请检查Spi_SyncTransmit函数的参数是否正确指定了整个SPI事务(包括命令、地址和数据)。
    5. 错误处理

      • 验证SPI传输完成后获取的结果状态,确保Spi_GetSequenceResultSpi_GetJobResult都返回预期的状态。
    6. 读回验证

      • 写操作后立即读取Mode Control寄存器以确认写入值是否生效,需要注意的是,读操作可能需要不同的SPI事务序列。

    由于没有提供完整的上下文环境和相关库函数的具体实现,无法直接给出修复问题的完整代码。但我建议您按照上述步骤排查,并参考TJA1145的数据手册来确定SPI通信的正确过程。

    例如,SPI通信可能需要如下格式的序列(假设相应函数调用存在):

    // 正确初始化QSPI并配置好SPI工作模式
    
    // 进入配置模式或选择寄存器
    uint8 configCmdBuffer[1] = {CONFIGURATION_COMMAND_BYTE}; // 请替换为实际的配置命令
    Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0, configCmdBuffer);
    // 确保写入命令完成
    
    // 写入Mode Control寄存器
    uint8 MCControlRegValue = NORMAL_MODE_VALUE; // 替换为正常模式的十六进制值
    MCAddr_Buffer[0] = MODE_CONTROL_REG_ADDR_LSB;
    MCAddr_Buffer[1] = MODE_CONTROL_REG_ADDR_MSB;
    Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0, (uint8 *) &MCAddr_Buffer[0]);
    Spi_TransmitDataByte(SpiConf_SpiChannel_SpiChannel_0, MCControlRegValue);
    
    // 等待写操作完成
    while(/* ... */)
    {
        // ...
    }
    
    // 读回Mode Control寄存器验证
    readCmdBuffer[0] = READ_COMMAND_BYTE; // 替换为实际的读命令
    Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0, readCmdBuffer);
    Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_0, (uint8 *) & Addr_Buffer[0]);
    
    // 检查Addr_Buffer中的值是否与写入的正常模式值相符
    

    请务必查阅具体的芯片数据手册以及MCAL库文档以获得正确的命令和操作顺序。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 创建了问题 3月1日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22