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.

[参考译文] ADS1298ECGFE-PDK:无法通过 SPI 进行通信

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1027634/ads1298ecgfe-pdk-unable-to-communicate-via-spi

器件型号:ADS1298ECGFE-PDK
主题中讨论的其他器件:ADS1298

您好!

我与 ADS1298的 SPI 通信存在一些严重问题。

我正在尝试读取 Device-ID 寄存器、但我没有从器件获得任何响应。

加电后、我将器件复位、如下所示:

	// CS
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);

    // RESET LOW
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
    HAL_Delay(100);

    // RESET HIGH
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
    HAL_Delay(100);

    // RESET CMD
    HAL_SPI_Transmit(&this->spi_handle, &COMMANDS.RESET, 1, 250);

	while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY);

	// CS
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);

之后、我发出 SDATAC 命令:

	// CS
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);

    HAL_SPI_Transmit(&this->spi_handle, &COMMANDS.SDATAC, 1, 250);

	while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY);

	// CS
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);

然后尝试读取 Device-ID:

	constexpr uint8_t reg_addr = 0x00;

	uint8_t opcodes[3];
	opcodes[0] = 0x20 | reg_addr;
	opcodes[1] = 0x00;
	opcodes[2] = 0x00;

	uint8_t receive;

	// CS
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);

	HAL_SPI_Transmit(&this->spi_handle, &opcodes[0], 1, 250);

	while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY);

	HAL_SPI_Transmit(&this->spi_handle, &opcodes[1], 1, 250);

	while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY);

    HAL_SPI_TransmitReceive(&this->spi_handle, &opcodes[2], &receive, 1, 250);

	while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY);

	// CS
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);

	return (receive >> 5);

但我只接收0x00。 有什么想法、我可能会遗漏什么? 我已经检查了1.2V 的 VCAP1

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

    第一个示波器图片:MOSI

    第二个示波器图片:MISO

    MOSIMISO

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

    您好!

    欢迎访问 E2E 论坛、感谢您的发帖。

    在上电期间、源代码和示波器图未明确器件的初始条件。 因此、您是否会验证您是否遵循了加电时序图(图105)和模拟和数字电源加电后的加电初始流程(图93)? 为了进行调试、您可能需要尝试从其他寄存器中读取、以查看是否能够获得 CONFIG1/2/3的任何默认寄存器值。

    您的设计中的硬件 RESETn 和 PWDNn 引脚是如何连接的? 在硬件设计中、它们是连接在一起还是单独控制? 某些硬件设计中常见的一种情况是 RESETn 和 PWDNn 引脚连接在一起。 在这种情况下、当 RESETn 引脚被发出时、器件硬件复位可能无法正常运行。

    [常见问题解答] ADS129x:为什么器件 ID 寄存器显示的通道数不正确?

    [常见问题解答] ADS129x:通过 SPI 与 ADS129x 器件通信时遇到问题。 我应该尝试哪些调试步骤?

    谢谢

    -TC

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

    我只是想知道、 如果我相对于 GND 进行测量、VCAP 在-1.1V 而非+1.1V 时是否正常运行? 如果我使用万用表在 VCAP 上进行测量、我将获得1.1V 的电压、如预期的那样。 在为电路板供电后仅等待2或3秒是否足够、以确保为 VCAP 充电?

    我使用的是德州仪器(TI)的电路板(ADS1298ECGFE-PDK)、我只需连接3.3V、5.0V 和 GND (0V)-我不是很理解为什么我要担心启动-电路板不应该处理这个问题?

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

    我只是想知道、 如果我相对于 GND 进行测量、VCAP 在-1.1V 而非+1.1V 时是否正常运行? 如果我使用万用表在 VCAP 上进行测量、我将获得1.1V 的电压、如预期的那样。 在为电路板供电后仅等待2或3秒是否足够、以确保为 VCAP 充电?

    我使用的是德州仪器(TI)的电路板(ADS1298ECGFE-PDK)、我只需连接3.3V、5.0V 和 GND (0V)-我不是很理解为什么我要担心启动-电路板不应该处理这个问题?

    编辑:我必须切换 JP21。 在原始配置中、引脚接头上的 CS 未连接到 ADS1298 IC 上的 CS。 现在工作正常(至少读取配置寄存器)