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.

[参考译文] ADS1120EVM:无法写入或读取寄存器

Guru**** 2558250 points
Other Parts Discussed in Thread: ADS1120, HALCOGEN

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/614803/ads1120evm-unable-to-write-or-read-register

部件号:ADS1120EVM
主题中讨论的其他部件:ADS1120HALCOGEN

你(们)好

 我是这款转换器的新用户,使用简单的写寄存器和读寄存器命令测试我的ADS1120,以了解其工作原理。  我正在 使用Mibspi协议测试此问题。

我正在使用Halcogen来生成驱动程序。 我为此创建了3个转接组。 TS0 5字节,TS1 1字节,TS2 3字节和TS3 4字节。

我在RM48中作为主代码运行此代码。

这是我的代码:

Void主(void)

/*用户代码开始(3)*/

UINT16_t resetCmd = 0x06;

uINT16_t startCmd = 0x08;

UINT16_t writeRegCmd[5]={0x43,0x08,0x04,0x10,0x00};

UINT16_t readRegCmd = 0x23;

UINT16_t rxBuffer[4]={0};

/*初始化RTI驱动程序*/

rtiInit();

/*启用RTI比较0中断通知*/

rtiEnableNotification (rtiNOTIFICION_COMPARE0);

/*启用IRQ -清除CPS寄存器中的I标志*/

/*注:这通常由操作系统或Svc调度程序*/完成

_enable_IRQ();

/*初始化MibSpi*/

mibspiInit();

//重置ADC1120

mibspiSetData(mibspireG1,&resetCmd);

mibspiTransfer (mibspireG1,1);

while (!(mibspiIsTransferComplete (mibspireG1,0)));

//将值写入所有4个寄存器

mibspiSetData (mibspiREG1,0,writeRegCmd);

mibspiTransfer (mibspireG1,0);

while (!(mibspiIsTransferComplete (mibspireG1,0)));

//从所有4个寄存器读取值

mibspiSetData(mibspireG1,&readRegCmd);

mibspiTransfer (mibspireG1,1);

while (!(mibspiIsTransferComplete (mibspireG1,1)));

//获取数据

mibspiGetData (mibspireG1,3,rxBuffer);

mibspiTransfer (mibspireG1,3);

while (!(mibspiIsTransferComplete (mibspireG1,1)));

mibspiSetData(mibspireg1,&startCmd);

mibspiTransfer (mibspireG1,1);

while (!(mibspiIsTransferComplete (mibspireG1,1)));

/*启动RTI计数器块0 */

rtiStartCounter(rtiCOUNTER_BLOCK0);

/*永远运行*/

同时(1);

/*用户代码结束*/

}

以下是将ADS连接到RM48的方式

/*电线连接

* ADS1120   ---   RM48

* TP5 -黑色->  DOUT

* TP3 -橙色->- DIN

* TP2 -白色-> SCLK

* TP1 -紫色-> CS

*/

当我尝试读取寄存器值时,我得到了所有4个寄存器的FF。 现在,我陷入困境,需要一些帮助才能继续前进。

以下是协议分析器显示的内容:


谢谢

Thomas

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

    您好,Thomas:

    欢迎参加论坛!  请尝试再次插入分析仪快照吗?  此信息将非常有用。  此外,在尝试与ADS1120通信之前,您必须确保在执行reset命令后等待足够长的时间以使设备重新启动。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速响应。 现在我添加了AD Delay A After reset命令。
    //重置ADC1120
    mibspiSetData(mibspireG1,&resetCmd);
    mibspiTransfer (mibspireG1,1);
    while (!(mibspiIsTransferComplete (mibspireG1,1)));
    __DELAY周期(50万);

    以下是带有新延迟的分析仪输出:
    #级别 索引 m:s.ms.us 持续 错误 记录 数据
    0 0 0:00.000 .................000 捕获已开始 [08/01/1713:43:09]
    0 1 0:03.543 064 8.000 Us 1 B 事务 600
    04 0 :03.558 985 39.800 US 5 B 事务 43FF 08FF 04FF 10FF 00FF
    0 7 0:03.559 027 8.000 Us 1 B 事务 23FF
    0 10 0:03.559 038 31.800 US 4 B 事务 00FF 00FF 00FF 00FF
    0 13 0:03.559 072 8.100 Us 1 B 事务 08FF
    0 16 9:01.789 045 捕获已停止 [08/01/1713:52:11]

    此致

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

    您好,Thomas:

    感谢您提供更多信息。  对于ADS1120,通信 面向8位(字节),而mibspi面向16位(字)。  因此数据长度必须正确匹配。  我对mibspi外设不是很熟悉,所以我不知道您是否可以配置为仅8位(字节)传输。  使用示波器或逻辑分析仪监控通信有助于验证事务长度和数据。  示波器快照 还可以验证是否使用了正确的SPI格式。  此外,如果使用CS,则CS必须在整个通信事务中保持较低的值。  如果CS在字节数或字词之间切换,则通信将在ADS1120上重置,并且所需的操作将被取消。

    如果外设需要16位长度,则必须将这些字节组合在一起,以形成正确的通信。  例如,WREG的传输事务在上面显示为 43FF 08FF 04FF 10FF 00FF,这是不正确的。  但是,可以重新组合数据 ,使其显示为4308 0410 00FF,此时将正确的字节顺序 传输到ADS1120。  收到的字必须分解为字节。   

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我也在尝试使用Mibspi,但看起来我可以发送8位数据。 为了确保我需要创建长度为1字节的转移组。 在我的示例代码中,这是我用来发送reset命令的内容。 协议分析器显示以下结果:
    0 1 0:03.543 064 8.000 Us 1 B 事务 600
    我正在发送0x06,但您将看到600。 即06 00,第二个字节是ADS输出的字节。 WREG故障也是如此。
    04 0 :03.558 985 39.800 US 5 B 事务 43FF 08FF 04FF 10FF 00FF
    这意味着主发送0x43 08 04 10 00后面的"FF"和每个发送字节是ADS的输出。 所以命令对我来说很好。 然后,我发送一个0x23,结果为“FF”,并尝试读取缓冲区,它显示所有FF.
    0 10 0:03.559 038 31.800 US 4 B 事务 00FF 00FF 00FF 00FF。
    我连接了示波器,但我看到没有变化,它保持高(FF)。

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

    您好,Thomas:

    您需要验证每次数据传输只发送8个时钟。  您还需要确保整个通信事务中的CS值较低。  在WREG数据传输过程中,能否向我发送已连接范围的图片?  (拍照电话没问题,我只想验证通信是否正确。)

    谢谢!

    Bob B

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

    谢谢Bob。 以下是WREG命令的范围结果。

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

    您好,Thomas:

    在回复中使用丰富格式,然后单击插入媒体图标上传图片。

    谢谢!

    Bob B

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

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

    您好,Thomas:

    很好!  我对CS上的峰值有一些担忧。  这些峰值足以取消通信。  否则,通信似乎是正确的。  您能否捕获相同的信息,但仅用于读取?  

    谢谢!

    Bob B

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

    以下是REG命令的输出。

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

    您好,Thomas:

    这个图解更有趣。  注意:在整个读取寄存器通信过程中,CS不会保持低电平。  发出初始读取寄存器命令,但在CS变高时取消。  您可以尝试持续保持CS低电平,看看这是否有帮助。  我猜CS在写入寄存器中也会很高,但通信周期的发生速度要快得多,而且只是范围上的一个小问题。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,你是对的。 我去了Halcogen,从MIBSPI1转接组中选择了"Chip Select Hold"(芯片选择保持),它完成了这项工作。
    现在,读取结果在分析仪中显示为:
    04 0 :01.887 588 40.300 US 5 B 事务 43FF 08FF 04FF 10FF 00FF
    0 7 0:01.887 632 40.200 US 5 B 事务 23FF 0008 0004 0010 0000

    感谢你的帮助。 我花了太多时间来解决这个问题。

    谢谢
    Thomas