TI论坛
直播中

刘继牛

8年用户 1056经验值
私信 关注
[问答]

LDC1000的proximity data读不出来是怎么回事?


  • 我用的MCU是NXP JN5168
    以下是我参照网上能找到的代码和JN5168的data sheet写出来的代码
    vAHI_SpiConfigure(1,                                               // 1 slave device
                                    E_AHI_SPIM_MSB_FIRST,
                                    0,0,                                           // Clock polarity unchanged, Phase: latch data on leading edge of the clock
                                    8,                                              // Clock divider: Peripheral clock is divided by 2 x u8ClockDivider
                                    FALSE,                                    // Interrupt disabled
                                    FALSE);                                   // AutoSlaveSelect disabled
                                    uint8 out;
    vAHI_DioSetDirection(0, E_AHI_DIO0_INT);          // DIO0 is connected with CSB, set DIO0 as output


    Below is my programming code
    vAHI_SpiSelect(1); //Power mode off
    vAHI_SpiStartTransfer16(0x0B00);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Rp max
    vAHI_SpiStartTransfer16(0x0112);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Rp min
    vAHI_SpiStartTransfer16(0x023C);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); // interrupt mode: comparator
    vAHI_SpiStartTransfer16(0x0A02);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //High LSB
    vAHI_SpiStartTransfer16(0x0684);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //High MSB
    vAHI_SpiStartTransfer16(0x071C);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Low LSB
    vAHI_SpiStartTransfer16(0x0820);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Low MSB
    vAHI_SpiStartTransfer16(0x091C);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Power mode active
    vAHI_SpiStartTransfer16(0x0B01);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy(); // End of initialisation


    然而当我想读以下这些值的时候,出来的结果都是0x81, 0x82,0x86等等,proximity data 出来的结果也是0xa1和0xa2.
    vAHI_SpiSelect(1); //Rp max
    vAHI_SpiStartTransfer8(0x81);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Rp min
    vAHI_SpiStartTransfer8(0x82);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //High LSB
    vAHI_SpiStartTransfer8(0x86);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //High MSB
    vAHI_SpiStartTransfer8(0x87);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Low LSB
    vAHI_SpiStartTransfer8(0x88);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();
    vAHI_SpiSelect(1); //Low MSB
    vAHI_SpiStartTransfer8(0x89);
    out =u8AHI_SpiReadTransfer8();
    DBG_vPrintf(TRACE_EXCEPTION, "0x%08xrn", out);
    vAHI_SpiSelect(0);
    vAHI_SpiWaitBusy();

    我想问一下我什么地方的代码写错了?谢谢大家,望各位指教。

回帖(2)

李华

2025-1-7 09:22:51
看上去程序还是比较整齐的, 但没有条件实际调试一下找其中的原因, 我想说两个方面.
1. 先验证时序吧, 根据手册的时序规范, 看看数据传输中有没有完全符合时序要求.
2. DBG_vPrintf(), 我担心这个函数费的时间太久, 设备端是否会引入总线超时故障而关闭数据连接
举报

李鸿

2025-1-8 17:24:59
看起来您在使用NXP JN5168 MCU与LDC1000传感器进行通信时遇到了问题,无法读取接近度数据。您提供的代码片段是关于SPI配置的,但是没有完整的代码,所以很难确定问题所在。不过,我可以提供一些建议和步骤,帮助您排查和解决问题。

1. **检查硬件连接**:
   - 确保LDC1000的SPI引脚正确连接到JN5168的对应SPI引脚。
   - 检查电源和地线是否连接正确。
   - 确保LDC1000的CS(片选)引脚被正确控制。

2. **检查SPI配置**:
   - 您提供的代码片段显示了SPI的配置,但是没有完整的配置参数。确保您的SPI配置与LDC1000的数据手册中的SPI配置要求相匹配。
   - 检查时钟频率、CPOL(时钟极性)、CPHA(时钟相位)等参数是否正确。

3. **检查SPI读写函数**:
   - 确保您使用的SPI读写函数是正确的,并且能够正确地发送和接收数据。
   - 检查是否有任何错误处理机制,以便在通信失败时能够捕获错误。

4. **检查LDC1000的配置**:
   - 确保LDC1000已经被正确配置,以便能够输出接近度数据。
   - 检查LDC1000的寄存器设置,确保它们被设置为正确的值。

5. **调试和测试**:
   - 使用调试工具(如J-Link或ST-Link)来调试您的代码,检查SPI通信是否正常。
   - 尝试发送简单的测试命令到LDC1000,看看是否能够收到预期的响应。

6. **查看数据手册和示例代码**:
   - 仔细阅读LDC1000和JN5168的数据手册,确保您的代码符合硬件的要求。
   - 查找是否有官方或社区提供的示例代码,这些代码可以作为参考。

如果您能提供更多的代码或错误信息,我可以提供更具体的帮助。希望这些建议能够帮助您解决问题。
举报

更多回帖

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