使用 STM42F411

问题描述

我正在尝试从 TI 的 ADS8686S ADC 读取寄存器。它具有以下寄存器读取时序图(来自 https://www.ti.com/lit/ds/symlink/ads8686s.pdf?ts=1624204868114&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FADS8686S):

enter image description here

设备寄存器为 0x10,假定值为 0x2002。

我有以下 SPI 初始化:

static void MX_SPI1_Init(void)
{
    /* SPI1 parameter configuration*/
    hspi1.Instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_MASTER;
    hspi1.Init.Direction = SPI_DIRECTION_2LInes;
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
    hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
    hspi1.Init.NSS = SPI_NSS_SOFT;
    hspi1.Init.BaudratePrescaler = SPI_BAUdratEPRESCALER_64;
    hspi1.Init.FirstBit = SPI_FirsTBIT_MSB;
    hspi1.Init.TIMode = SPI_TIMODE_disABLE;
    hspi1.Init.CRCCalculation = SPI_CRCCALculaTION_disABLE;
    hspi1.Init.CRCpolynomial = 10;
    if (HAL_SPI_Init(&hspi1) != HAL_OK)
    {
        Error_Handler();
    }
}

使用以下代码段专门读取该寄存器:

// Read register device id (0x10 << 9) & 0xFF00
uint8_t tx[2] = { 0x20,0x00 };
uint8_t rx[2] = { 0x00,0x00 };

// Send read register command
set_adc_cs(GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1,tx,rx,2,1000);
set_adc_cs(GPIO_PIN_SET);

// Don't care
HAL_SPI_TransmitReceive(&hspi1,1000);

// Receive register result
set_adc_cs(GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1,1000);
set_adc_cs(GPIO_PIN_SET);

我读回 rx 为 { 0x00,0x02}。几乎就像我得到了一半的寄存器。只是在这一点上真的不确定这个问题,一直在用头撞墙。

是我的 SPI 设置,还是我误解了时序图中的某些内容

解决方法

它表示必须为读取设置位 15。你很清楚。试试:

uint8_t tx[2] = { 0xA0,0x00 };