TI论坛
直播中

qjqb

9年用户 1365经验值
擅长:5762
私信 关注
[问答]

PCB板短时间内重复开关机,导致ADS8328初始化失败怎么解决?


  • PCB板短时间内重复开关机,导致ADS8328初始化失败,看PDF,有POR复位和CFR_D0复位。选择CFR_D0复位
    程序如下,但是没有效果。
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    while(bit_status == RESET) bit_status = (GPIOE->IDR & (uint8_t)ADBUSY)? SET : RESET;
    GPIOB->BRR = ADCS;
    SPI1->DR =0xEFFE;
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    __ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");__ASM("NOP");
    GPIOB->BSRR = ADCS;
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    采用的是控制芯片自带的SPI,所以往寄存器写0XEFFE就行,正常开关机,读取数据都正常,只有短时间重复开关机才会如此。


    问题:
    1--资料上写的:The converter has two reset mechanisms, a power-on reset (POR) and a software reset using CFR_D0. These two mechanisms are NOR-ed internally. When a reset (software or POR) is issued, all register data are set to the default values (all 1s) and the SDO output (during the cycle immediately after reset) is set to all 1s. The state machine is reset to the power-on state。里面的1S是指恢复到默认值需要1秒吗?
    2--寄存器值0xEFFE是否正确?
    3--转换时需要操作CONVERT管脚,操作寄存器是否需要?

回帖(2)

倪驰銮

2025-1-4 09:36:34
  这个问题还真有的麻烦.
短时间重复开关机问题, 往往是 POR 方面的硬件监控问题, 或者是 MCU 发指令过程中的断电导致指令发送错误等因素.
举报

王鹏

2025-1-6 11:12:38
从您提供的信息来看,您正在尝试使用CFR_D0复位程序来解决ADS8328初始化失败的问题。以下是一些建议和步骤,希望能帮助您解决问题:

1. 确保您的硬件连接正确:请检查您的PCB板上的ADS8328芯片与电源、地线、SPI接口等连接是否正确。错误的硬件连接可能导致初始化失败。

2. 检查电源供应:确保您的PCB板电源供应稳定,电压和电流符合ADS8328的要求。不稳定的电源供应可能导致初始化失败。

3. 检查SPI接口:确保您的SPI接口配置正确,包括时钟频率、CPOL、CPHA等参数。错误的SPI配置可能导致初始化失败。

4. 检查CFR_D0复位程序:您提供的CFR_D0复位程序代码可能存在问题。请参考ADS8328的数据手册,确保您的复位程序正确。以下是CFR_D0复位程序的一个示例:

```c
uint8_t bit_status = RESET;
while(bit_status == RESET)
{
    bit_status = (GPIOE->IDR & (uint8_t)ADBUSY)? SET : RESET;
    GPIOB->BRR = ADCS;
    SPI1->DR = 0xEFFE;
    __ASM("NOP");
    __ASM("NOP");
    __ASM("NOP");
    __ASM("NOP");
}
```

5. 增加延时:在重复开关机的过程中,可能需要在每次开关机之间增加一定的延时,以确保ADS8328有足够的时间完成初始化。您可以尝试在复位程序中添加延时函数,例如:

```c
void Delay(uint32_t time)
{
    for(; time != 0; time--);
}
```

6. 检查其他可能的问题:如果以上步骤都无法解决问题,您可能需要检查其他可能的问题,例如PCB板的设计、ADS8328芯片的损坏等。

希望这些建议能帮助您解决ADS8328初始化失败的问题。如果问题仍然存在,请提供更多详细信息,以便我们为您提供更具体的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分