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.

[参考译文] ADS1259:未从 ADS1259获取 SPI 数据

Guru**** 2406510 points
Other Parts Discussed in Thread: ADS1259

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/608097/ads1259-not-getting-spi-data-from-ads1259

器件型号:ADS1259

这是我在微 C 编译器中为 stm32f407VG 编写的代码,用于与 ADS1259进行 SPI 通信。 我已经检查了 SCK、MOSI、片选所有的时钟工作正常、除了 MISO。 我没有在 MISO 引脚上获取任何 AND 数据。 请给我一些帮助。

void ADS1259_init (void);
void ADS1259_reset (void);
long read_adc_value (void);
void ADS1259_reset (void);
长 ADC_VOLTAGE;
长 ADC_Value[3];
长蜡染国际;
长 adcval;
长值;
char __buffer[20];
//void SOFT_UART_String (char * string_ptr);
//long ADC_Value[2];
void UART2_Write_Int (long num);
int i =0;
void main()

SPI3_Init_Advanced (_SPI_FPCLK_DIV8、_SPI_MASTER |_SPI_8_BIT |_SPI_CLK_IDLE_LOW |_SPI_FIRST_CLK_EDGE_TRANSITION |_SPI_MSB_FIRST |_SPI_SS_DISABLE |_SPI_SSM_ENABLE |_SPI_SSI_CLK_MODE|_SPI_1_SPI_CLK_MODULE_TOP_11、SPI_PCI3_1_11和 SPI3_MODULE_11)
delay_ms (300);
UART2_Init_Advanced (9600、_UART_8_bit_data、_UART_NOPARITY、_UART_ONE_STOPBIT、&& GPIO_MODULE_USART2_PD56);
GPIO_Digital_Input (&GPIOA_base、_GPIO_PINMASK_2);
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_15);//LED1用于 drdy
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_8);//芯片选择
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_12);//LED1用于芯片选择
delay_ms (300);
UART2_Write_Text ("正在初始化 SPI3 ");
delay_ms (500);
ADS1259_init();
ADS1259_reset ();
ADS1259_init();
UART2_Write_Text ("初始化完成");
delay_ms (500);
while (1)

GPIOE_ODR/B15=1;
ADC_VOLTAGE = READ_ADC_VALUE ();
UART2_Write_Text (" ADC_VOLTAGE =");
UART2_Write_Int (ADC_VOLTAGE);
UART2_Write_Text ("\r\n");
GPIOE_ODR/B15=0;

void ADS1259_init (void)

GPIOE_ODR/B8=0;//芯片选择低电平
SPI3_Write (0X11);
SPI3_Write (0x40);
SPI3_Write (0x08);
SPI3_Write (0b10000101);
SPI3_Write (0b00010000);
SPI3_Write (0b00010000);
SPI3_Write (0b00000000);
SPI3_Write (0b00000000);
SPI3_Write (0b01000000);
GPIOE_ODR/B8=1;//芯片选择高电平

void ADS1259_reset (void)

GPIOE_ODR/B8=0;
SPI3_Write (0x06);
GPIOE_ODR/B8=1;

long read_adc_value (void)

GPIOE_ODR/B8=0;//芯片选择低电平
SPI3_Write (0x08);//start
delay_us (100);
SPI3_Write (0x12);//RDATA
ADC_Value[0]= SPI3_READ (0x00);
ADC_Value[1]=SPI3_READ (0x00);
ADC_Value[2]= SPI3_READ (0x00);
delay_ms (100);
GPIOE_ODR/B8=1;//芯片选择高电平
ADC_Value[0]= ADC_Value[0]* 65536;
ADC_Value[1]= ADC_Value[1]*256;
adcval =(adc_value[0]| adc_value[1]| adc_value[2]);
IF (adcval & 0x800000)

adcval =~adcval;
nativeInt = adcval + 1;
nativeInt = nativeInt;
值=-((nativeInt*2.9802326E-7)+5);


其他

nativeInt = adcval;
数值= nativeInt*2.9802326E-7;

返回值;

空 UART2_Write_Int (long num)//以 ASCII 格式发送整数值

LongToStr (num、__buffer);
UART2_Write_Text (__buffer);

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

    您好、Saket、

    欢迎访问 TI E2E 论坛!

    您是否能够读取寄存器或从器件获取任何响应?
    我要仔细检查器件的电源、并确保 ADC 时钟(或 crsytal)在 XTAL1/CLKIN 上工作。

    浏览完您的代码后、我发现三个潜在问题:

    1. 在""SPI3_Init_Advanced()函数中、您似乎要使用""_SPI_CLK_IDLE_LOW和""_SPI_FIRST_CLK_EDGE_TRANSITION参数将 SPI 配置为 MODE0。 ADS1259在 SPI MODE1中运行、因此您可能需要改用""_SPI_SECOND_CLK_EDGE_TRANSITION

    2. 启动 ADC 转换后、您似乎只等待100us、然后再发送 RDATA 命令。 使用10SPS 数据速率和 SINC2滤波器、您需要等待至少200ms 才能读取数据。


    3. 在检查数据是否为负时、我认为您只需对24位数据进行符号扩展到32位数据类型、而不是对所有位进行反相。 例如:
    if (adcval & 0x800000)
    {
    nativeInt =(0xFF000000 | adcval);
    数值=(nativeInt*2.9802326E-7); //更正:此处不需要附加负号
    } 

     

    如果您可以共享原理图并让您知道 ADC 时钟和 SPI SCLK 使用的频率、也会有所帮助。

     

    谢谢、此致、
    Chris

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

    。 感谢您的回复 Chris、

             主频率为120MHz、SPI 时钟频率为3.7MHz。  将 SPI 模式从0更改为1、并很快在此处更新。

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

    谢谢主席先生。 我更改了 SPI 模式、现在代码工作正常。

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

    很好、我很高兴解决了这个问题! 如果您遇到任何其他需要帮助的问题、请告知我们。

    此致、
    Chris