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.

[参考译文] ADS131E04:SPI接口初始化问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/605617/ads131e04-spi-interface-initialization-problem

部件号:ADS131E04

您好,

我使用的是与PIC32MZ微控制器连接的ADS131E04,但使用SPI接口初始化和控制器件时遇到一些问题。 我遵循应用程序信息部分(第 10.1 .2)使用作为设置:

-CLKSEL =1使用内部振荡器主时钟;

- PWNDN和RESETN不 受控制(固定为3.3V,因此始终为1)

- SCLK = 1 MHz

我初始化了停止转换的设备(驱动启动=0),并等待tPOR等待fCLK = 2.048 MHz用作主时钟,然后再初始化SPI接口。 之后,我发送了reset命令,但SPI接口阻止并仅在关闭ADC时继续发送命令(Micro和ADC位于两个不同的板上,因此有两个不同的电源)。  

这是我用模拟发现设备获得的:

这是我的初始化代码

void app_Initialize ( void ){

/*将应用程序状态机置于初始状态。 */
AppData.state = APP_STATE初始化;

/*等待初始开机时间*/
/* F_clk = 2.048 MHz*/
/* t_clk = 0.488 us *
/* tPOR = 2^18 * t_clk = 12.7926万 us */
ADC_StaticDelay (13万); 
ADC_START_LOW ();
/* TODO:初始化应用程序的状态机和其他 *参数。 */ }
void app_Tasks ( void ){


/*检查应用程序的当前状态。 */
切换( AppData.state )
{
/*应用程序的初始状态。 */
案例APP_STATE初始化:
{

ADC_Init();

/*重置设备*/
ADC_SendCommand(reset);

/*等待重置的延迟正常*/
/* 18 t_CKL = 18* 0.488 = 8.784 US */
ADC_StaticDelay (10);

/*读取ID寄存器*/
ADC_ReadRegister (ID);

bool appInitialized = TRUE;


IF (已初始化)
{

AppData.state = app_state_service_tasks
;}
中断;
}

案例应用程序状态服务任务:
{

中断;
}

/* TODO:实施应用程序状态机。*/


/*绝不能执行默认状态。 */
默认:
{
/* TODO:处理应用程序状态机中的错误。 */
中断;
}
}
} 

有人可以向我建议我在初始化此ADC时做了什么错误?

感谢您的支持。

Salvatore de Simone。

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

    感谢您的帖子。

    建立电源后,应在发出reset命令之前等待tPOR。 您在第10行中似乎正确地执行了此操作。 您应观察/DRDY从低到高,并在通过tSETLE之前保持高。 在启动过程中是否看到/DRDY切换?

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

    您好,Ryan:

    使用模拟发现设备时,当电源稳定且起点线高时,我看到/DRDY在1/64 fCLK处切换。 因此,在第10行的初始化代码中,在tPOR被传递后,我停止了与ADC_START_LOW ()的切换,这会使起点线向下移动,并使设备停止切换/DRDY和DOUT线。

    然后我尝试激活SPI接口并发送reset命令以尝试使用设备,首先读取ID寄存器。 无论如何,正如您看到SPI接口被重置命令占用一样,DRDY从低到高,并保持在高状态。 可能需要重置线路来激活ADC?  

    我在SPI主控设置中设置了CPOL = 0和CPHA = 1。 这些设置是否正确?

    感谢您的支持。

    Salvatore。

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

    是- CPOL = 0,CPHA = 1正确。

    我不确定你所说的“激活SPI”是什么意思。 除了降低/CS以开始通信之外,您没有什么需要做的。 执行reset命令后,您将需要18 tCLK个周期才能再次开始与设备通信。 您是否在执行重置命令后等待足够长的时间?

    发送重置命令时,无需降低启动时间。 事实上-这说明了/DRDY在执行reset命令后保持高位的原因。 当启动较低时,调制器未运行,转换将停止。 在整个初始化过程中保持START HIGH (高起点)。

    请告诉我这是否能解决问题。 :)

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

    是的,我的意思正是您所说的(drive /CS low and start sending commands)。 重置后,正是因为我使用内部振荡器生成主时钟,我有1/2048 s = 0.488 us作为tCLK,所以这是重置命令后延迟10 us (第18行)的原因。 如果/DRDY开始切换,我将尝试保持START HIGH (启动高)并测试通信。 我会给你更新的:)

    感谢您的支持,

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

    很抱歉回复延迟太久。 我解决了以下问题:

    —起动信号低
    —在发送RREG或WREG寄存器之前发送SDATAC命令
    -在中更改了PIC32 (主)的CPOL和CPHA设置:
    - DRV_SPI_CLOCK_MODE_IDE_LLOW _EDGE_RISE
    - SPI_INT_Sampling_phone_in_middle

    感谢大家对我的支持。

    Salvatore。