qq_43391736 2024-07-16 09:39 采纳率: 40%
浏览 4
已结题

mcal、spi、旋变

问题遇到的现象和发生背景

使用mcal的spi与旋变芯片进行通信,无法获得旋变芯片的spi反馈

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
void Ex_Spi3_MasterSequenceEndNotification(void)
{
    Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_1, Ex_Spi3_MasterRxDataBuffer);
    Ex_Spi_CheckRxResult(Ex_Spi3_MasterRxDataBuffer);
}
void SPI_ReadWriteByte()
{                      
     //Spi_SetupEB(SpiConf_SpiChannel_SpiChannel_1, Ex_Spi3_MasterTxDataBuffer, Ex_Spi3_MasterRxDataBuffer, 100U);
     Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_1, Ex_Spi3_MasterTxDataBuffer);
     Spi_AsyncTransmit(SpiConf_SpiSequence_Spi3Sequence_Master);
     if(check_finish==0){
     check_sequence_finish();
     }
     CS_L();
     Ex_Spi3_MasterSequenceEndNotification();
     CS_H();
}
void SC2161_WRITE(uint8 data) // 无论数据还是地址 模拟时序发送
{               
        CS_L();
        for (Index = 0U; Index < EX_SPI_CHANNEL_LENGTH; Index++)
        {
            Ex_Spi3_MasterTxDataBuffer[Index] = data;
            SPI_ReadWriteByte();
        }
    CS_H();

}
uint8 wr(uint8 DAT)
{
   uint8 temp=0;
   uint8 temp2=0;
   uint8 a=0;
    CS_H();
    SAM_H();
    //Delay(30);
    SAM_L();    
    CS_L();
    temp=DAT;
     //SPI1_ReadWriteByte(temp2);
        Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_1, Ex_Spi3_MasterRxDataBuffer);
        
        for (Index = 0U; Index < EX_SPI_CHANNEL_LENGTH; Index++)
        {
          if( (uint8*)temp ==  &(Ex_Spi3_MasterRxDataBuffer[Index]))
          { 
            
            temp2=Ex_Spi3_MasterRxDataBuffer[Index];
          
          }
           // *temp = Ex_Spi3_MasterRxDataBuffer[Index];
        }
    CS_H();
    //Delay(30);
    CS_L();
     //temp=SPI1_ReadWriteByte(temp2);
        //Spi_ReadIB(SpiConf_SpiChannel_SpiChannel_1, Ex_Spi3_MasterRxDataBuffer);
    CS_H();
   return temp2;
}

运行结果及详细报错内容

wr方法中获取的spi返回结果一直是0

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

如何获得旋变指定寄存器的值,通过spi通信

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-16 09:39
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在您提供的代码和问题描述中,有几个关键点需要注意,这些点可能会影响您获取SPI通信反馈的结果:

    1. CS信号时序:确保CS_L()CS_H()的时序与旋变芯片的数据手册要求一致。片选信号的稳定性对于SPI通信至关重要。

    2. 数据发送和接收:在wr函数中,您似乎没有实际发送DAT数据,而是直接调用Spi_ReadIB来尝试接收数据。这可能不是正确的通信流程。通常,您需要先发送数据,然后才能接收响应。

    3. 指针比较:在for循环中,您使用了(uint8*)temp == &Ex_Spi3_MasterRxDataBuffer[Index]这样的比较,这实际上比较的是指针的地址,而不是数据值。这可能导致逻辑错误。

    4. 数据读取逻辑:在wr函数中,您尝试读取数据,但是没有看到您发送数据的代码。确保在调用Spi_ReadIB之前,您已经正确地发送了数据。

    5. 错误检查:在Ex_Spi_CheckRxResult函数中,您需要检查是否有错误发生,并根据错误采取相应的措施。

    6. 硬件连接:检查硬件连接是否正确,确保SPI线路和旋变芯片的连接没有问题。

    7. 数据手册:再次确认您是否遵循了旋变芯片的数据手册中的SPI通信协议和时序要求。

    8. 调试工具:使用逻辑分析仪或其他调试工具来监视SPI通信,确保数据在物理层面上被正确发送和接收。

    9. 代码优化:根据调试结果,可能需要对代码逻辑进行优化,以确保数据能够正确地发送和接收。

    针对您的问题,以下是一些可能的解决方案:

    • 确保CS_L()CS_H()的调用与数据手册中的时序要求一致。
    • wr函数中,添加发送DAT数据的代码,然后再尝试接收数据。
    • 修正指针比较的错误,确保您比较的是数据值而不是地址。
    • 在通信过程中添加错误检查和处理机制,以便在出现问题时能够快速定位。
    • 使用调试工具来监视SPI通信,确保数据在物理层面上正确传输。

    如果您需要进一步的帮助,可以考虑使用“付费悬赏”来获取更专业的支持。同时,确保您的硬件和软件环境设置正确,并且遵循了旋变芯片的通信协议。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月26日
  • 创建了问题 7月16日

悬赏问题

  • ¥15 rt-thread线程切换的问题
  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊