请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 151|回复: 5

硬件SPI波形正常,但读不出数据

[复制链接]

该用户从未签到

4

主题

5

回帖

44

积分

新手上路

积分
44
发表于 2024-10-11 16:36:31 | 显示全部楼层 |阅读模式
使用硬件SPI的方式,和oz3717通信,用逻辑分析仪挂出来数据正常,但读取SPDAT寄存器一直读到0xFF;
硬件上外部有上拉电阻

IO口初始化部分
    GPIO_InitTypeDef    GPIO_InitStructure;



    GPIO_InitStructure.Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;   
    GPIO_InitStructure.Mode = GPIO_PullUp;   
    GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);




SPI初始化部分


    SPI_InitTypeDef                SPI_InitStructure;
    SPI_SW(SPI_P22_P23_P24_P25);        //SPI_P54_P13_P14_P15,SPI_P22_P23_P24_P25,SPI_P54_P40_P41_P43,SPI_P35_P34_P33_P32
   
    SPI_InitStructure.SPI_Enable    = ENABLE;                                //SPI启动    ENABLE, DISABLE
    SPI_InitStructure.SPI_SSIG      = ENABLE;                                //片选位     ENABLE, DISABLE
    SPI_InitStructure.SPI_FirstBit  = SPI_MSB;                                //移位方向   SPI_MSB, SPI_LSB
    SPI_InitStructure.SPI_Mode      = SPI_Mode_Master;                //主从选择   SPI_Mode_Master, SPI_Mode_Slave
    SPI_InitStructure.SPI_CPOL      = SPI_CPOL_High;                        //时钟相位   SPI_CPOL_High,   SPI_CPOL_Low
    SPI_InitStructure.SPI_CPHA      = SPI_CPHA_2Edge;                //数据边沿   SPI_CPHA_1Edge,  SPI_CPHA_2Edge
    SPI_InitStructure.SPI_Speed     = SPI_Speed_16;                        //SPI速度    SPI_Speed_4, SPI_Speed_8, SPI_Speed_16, SPI_Speed_2
    SPI_Init(&SPI_InitStructure);
    //NVIC_SPI_Init(ENABLE,Priority_3);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
    SPI_MISO_2 = 1;
    SPI_MOSI_2 = 1;
    SPI_SCLK_2 = 1;
    SPI_SS_2 = 1;
    SPIF = 1;   //清SPIF标志
    WCOL = 1;   //清WCOL标志



u8 SPI_WriteReadByte(u8 dat)                //SPI发送和读取一个字节数据
{
    SPDAT = dat;
    while(SPIF == 0); //查询模式
    SPIF = 1;
    WCOL = 1;
    return (SPDAT);
}



u8 spi_access(u8 number_bytes,u8 * dataout,u8 * datain){

    u8 i,ret=0;
   
    SPI_SS_2 = 0;
    for(i=0;i<number_bytes;i++){
        test_data = SPI_WriteByte(dataout);
        datain=test_data;
    }

    SPI_SS_2 = 1;
    return ret;
}



u8 spi_read_cmd(u8 cmd, u8 index, u8 read_number,u16 *buf){
   
    u8 ret=0;
    u8 btmp=0;
    u8 pec_cal = 0;
    u8 bdata_buf[6];
   
    if(read_number > 16)
    return 0;
    if(read_number == 0)
    return 0;

    bdata_buf[0] = cmd | (read_number-1);
    bdata_buf[1] = index;
    bdata_buf[2] = 0xff;
    bdata_buf[3] = 0xff;

    ret = spi_access((u8)(read_number*2+1+2),bdata_buf,SPI_RxBuffer);   //卡断点在此处读到全是0xff
   
    pec_cal = sCall_CRC8(bdata_buf_read, (u8)(read_number*2+2));
   
   
    if(pec_cal != bdata_buf_read[read_number*2+2]){
        return 0;
    }

    if(buf != NULL)
    {
        for(btmp=0;btmp<read_number;btmp++)
        {
            //Index 0 store command, index 1 store index
            buf[btmp] = bdata_buf_read[btmp*2+2] << 8;
            buf[btmp] |= bdata_buf_read[btmp*2+1+2];
        }
    }
    return 1;
}



u8 afe_register_read(u8 index, u8 read_number,u16 *buf)
{
    u8 ret;
    ret = spi_read_cmd(RD_REG_CMD, index, read_number, buf);
    return ret;
}


最外层调用afe_register_read(0x00, 1,&wData)读取0x00寄存器,如下波形没有问题,SPI_WriteReadByte(u8 dat)这个函数返回值一直不正常,发啥读到的都是FF.
截图202410111633572165.jpg

截图202410111617185207.jpg
截图202410111618592939.jpg
回复

使用道具 举报 送花

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 288 天

    [LV.8]以坛为家I

    29

    主题

    1774

    回帖

    5810

    积分

    论坛元老

    积分
    5810
    发表于 2024-10-11 17:09:31 | 显示全部楼层
    SPI读取时可对SPDAT写入0xFF产生CLK信号,发送完成后读取SPDAT就是收到的数据。
    示波器测量发送读取CLK信号时MISO脚是否有返回信号。
    回复 支持 反对

    使用道具 举报 送花

    该用户从未签到

    4

    主题

    5

    回帖

    44

    积分

    新手上路

    积分
    44
     楼主| 发表于 2024-10-11 17:19:58 | 显示全部楼层
    是已经发送了的,都正常,只有return (SPDAT)里面的数据不正常
    u8 SPI_WriteReadByte(u8 dat)                //SPI发送和读取一个字节数据
    {
        SPDAT = dat;
        while(SPIF == 0); //查询模式
        SPIF = 1;
        WCOL = 1;
        return (SPDAT);
    }
    截图202410111718303039.jpg
    回复 支持 反对

    使用道具 举报 送花

    该用户从未签到

    4

    主题

    5

    回帖

    44

    积分

    新手上路

    积分
    44
     楼主| 发表于 2024-10-12 09:55:19 | 显示全部楼层
    已解决,单片机MISO虚焊问题
    回复 支持 反对

    使用道具 举报 送花

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 117 天

    [LV.6]常住居民II

    13

    主题

    249

    回帖

    1093

    积分

    金牌会员

    积分
    1093
    发表于 2024-10-21 06:39:55 | 显示全部楼层
    today233 发表于 2024-10-12 09:55
    已解决,单片机MISO虚焊问题

    虚惊一场。看来焊接技术是成功的必要保证。
    回复 支持 1 反对 0

    使用道具 举报 送花

  • TA的每日心情
    开心
    前天 19:15
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    4

    主题

    15

    回帖

    338

    积分

    中级会员

    积分
    338
    发表于 2024-11-1 02:30:21 | 显示全部楼层
    你这代码是st的还是stc的
    回复 支持 反对

    使用道具 举报 送花

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-11-14 16:29 , Processed in 0.071626 second(s), 60 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表