This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BOOSTXL-PGA460:对主控制器和 PGA460之间的 UART 接口存在疑问

Guru**** 2013520 points
Other Parts Discussed in Thread: PGA460, ENERGIA
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/620751/boostxl-pga460-doubt-regarding-uart-interface-between-master-controller-and-pga460

器件型号:BOOSTXL-PGA460
主题中讨论的其他器件:PGA460ENERGIA

您好!

我使用不同的控制器作为 PGA460的主控制器。(UART 以115200波特率进行初始化、具有2个停止位、8个数据位、UART_DIAG = 1)  

从 PGA460EnergiaLibrary_v1.0.2中、我获得了.cpp 和.h 驱动程序文件、我将.cpp 驱动程序转换为.c 驱动程序。 我能够写入阈值、读取阈值、写入 EEPROM、从 EEPROM 读取、写入影子寄存器、 从影子寄存器读取,但当我使用系统诊断程序时,PGA460将在这个回复后以40 00 00 00 00进行回复,当我尝试执行任何操作(读取影子寄存器)时,它将以00 00 00进行回复。 如果是拉动回波数据转储、PGA460将以4C 00 00进行回复、之后不会处理读取或写入命令。  

以下是调用的函数

initBoostXLPGA460 (0、115200、0);


initThresholds (3); //3 -自定义阈值

readThresholds();


defaultPGA460 (2);  //2 -自定义默认值

burnEEPROM();

initTVG (3、3);   //3 -自定义 TVG 值


read_shadow_register();

runEchoDataDump (0);       //ultrasonicCmd (1、1);

                         //ultrasonicCmd (0、1);  

                         //runDiagnostics (1、0);
pullEchoDataDump (0);

read_shadow_register();

对于 超声波 Cmd (0、1); 传输的 UART 数据为;55 00 01 FE

对于 超声波 Cmd (1、1); 传输的 UART 数据为;55 01 01 FD

对于 runDiagnostics (1、0); 传输的 UART 数据为;55 08 F7   在执行此命令后,应答40 00 00 00,其它命令不能正常工作(读取和写入命令)。

在 GUI 界面模式下、我能够从 PGA460获得所有命令的有效回复。

您能帮我解决这个问题吗

谢谢、此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Neville、

    感谢您发表您的问题! 我们的 PGA460专家 Akeem 将能够在周一回到办公室时解决您的问题。

    此致、
    布莱尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Neville、

    要帮助调试此问题、请运行以下实验:
    •尝试在 runDiagnostics 命令和上一条命令之间添加一些额外的延迟(1)。 可能与之前仍在处理数据的命令发生冲突、并因中断而强制失败。
    •运行 runDiagnostic 命令以启动程序、然后再执行任何其他操作、以确定函数本身是否有缺陷、或者是否依赖于先前执行的命令。 设置第二个命令以读取任何寄存器值、从而确定是否提供了任何非零返回数据。

    在 Energia 中使用 MSP430时、我无法重现此故障。 由于您已经移植并重新格式化了库代码、因此我不完全确定为什么在主控制器上此函数会失败、而无法完全查看您的自定义主库代码。 您能否共享您的 runDiagnostic 函数版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Akeem:

    我在 runDiagnostics 命令和上一条命令之间指定了延迟,但仍然存在相同的问题。

    在运行诊断命令读取命令应答为零值后、通过运行 runDiagnostic 命令启动程序。

    runDiagnostics 功能如下:

    双运行诊断(uint8_t run、uint8_t diag)

    double diagReturn=0;

    if (run = 1)//运行系统诊断命令


    uint8_t buf8[3]={synctyte、SD、calcChecksum (SD)};
    PGA460_Write (buf8、sizeof (buf8)、1000);
    HAL_DELAY (100); //尝试在此处提供1s 延迟

    PGA460_READ (diagMeasResult、4、MAX_Mills_TO_WAIT);
    print(diagMeasResult,sizeof (diagMeasResult),1000);


    如果(diag = 2)//运行温度级别测量

    tempOrNoise = 0;//温度测量值
    uint8_t buf4[4]={synctyte、TNLM、tempOrNoise、calcChecksum (TNLM)};
    PGA460_Write (buf4、sizeof (buf4)、1000);

    HAL_DELAY (100);

    uint8_t buf6[3]={synctyte、TNLR、calcChecksum (TNLR)};//温度和噪声测量结果
    PGA460_Write (buf6、sizeof (buf6)、1000);

    HAL_DELAY (100);


    如果(diag = 3)//运行噪声级别测量

    tempOrNoise = 1;//噪声测量
    uint8_t buf4[4]={synctyte、TNLM、tempOrNoise、calcChecksum (TNLM)};//噪声测量
    PGA460_Write (buf4、sizeof (buf4)、1000);

    HAL_DELAY (100);

    uint8_t buf6[3]={synctyte、TNLR、calcChecksum (TNLR)};//温度和噪声测量结果
    PGA460_Write (buf6、sizeof (buf6)、1000);

    HAL_DELAY (100);


    if (diag = 2 || diag = 3)//拉热和噪声级别结果

    PGA460_Read (tempNoiseMeasResult、4、MAX_Millis_TO_WAIT);


    HAL_DELAY (100);

    开关(diag)

    情况0://传感器频率

    diagReturn=(1/(diagMeasResult[1]* 0.0000005))/ 1000;

    中断;
    情况1://衰减周期时间(us)

    diagReturn = diagMeas[2]* 16;

    中断;
    案例2://temperature

    diagReturn =((tempNoiseMeasResult[1]- 0)/(1 +(0 / 128))- 64)/ 1.5;

    中断;
    案例3://noise

    diagReturn = tempNoiseMeasResult[2];

    中断;
    默认值:break;


    返回 diagReturn;




    PGA460_Write 和 PGA460_Read 是 UART0轮询读取和写入。
    Print 为 UART1调试打印

    谢谢、此致、