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.

[参考译文] ADS7028:SPI 读取寄存器是否需要延迟?

Guru**** 2526700 points
Other Parts Discussed in Thread: ADS7028

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1160856/ads7028-does-spi-read-register-need-a-delay

器件型号:ADS7028

您好!
我正在尝试向 ADC 值写入一个简单的程序。 根据数据表(8.3.14.2.2寄存器读取),我写了以下函数:

void ADS7028_SPI_READ_reg (ADS7028_Device*器件、ADS7028_Reg regAddr、uint8_t * pData、INT8_t size)

uint8_t SPI_REG_addr[3]={0}、SPI_REG_READ[3]={0};

SPI_REG_ADDR[0]= 0x10;
SPI_REG_addr[1]= regAddr;
SPI_REG_ADDR[2]= 0x00;

HAL_GPIO_WritePin (Device->CS_Port、Device->CS_Pin、GPIO_PIN_RESET);
HAL_SPI_TransmitReceive (Device->hspi、SPI_REG_addr、SPI_REG_READ、3、HAL_MAX_DELAY);
HAL_GPIO_WritePin (Device->CS_Port、Device->CS_Pin、GPIO_PIN_SET);

HAL_DELAY (20);

SPI_REG_ADDR[0]= 0x00;
SPI_REG_ADDR[1]= 0x00;
SPI_REG_ADDR[2]= 0x00;

HAL_GPIO_WritePin (Device->CS_Port、Device->CS_Pin、GPIO_PIN_RESET);
HAL_SPI_TransmitReceive (Device->hspi、SPI_REG_addr、SPI_REG_READ、3、HAL_MAX_DELAY);
HAL_GPIO_WritePin (Device->CS_Port、Device->CS_Pin、GPIO_PIN_SET);

pData[0]= SPI_REG_READ[0];
pData[1]= SPI_REG_READ[1];

我将 Nucleo 64板与 STM32WB55配合使用。 我注意到我需要在第二个帧之前添加一个延迟(10到100ms)。
这对我的应用来说是有问题的。 您是否知道是否有办法避免此延迟?

谢谢你。
此致。
穆罕默德

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

    您好 Mouhamed、  

    由于没有完整的视图、因此尝试调试代码很困难。  您所指的延迟是指让器件读取数据与要求数据的帧之间的延迟、对吧?  

    此帧之间的延迟是否是 MCU 要求的10至100ms? 如果是、我建议联系 MCU 支持团队。

    ADC 不需要该延迟。 根据 ADC 的时序要求、有一些时序要求、但时间不长。  

    CS 脉冲持续时间为200ns

    此致

    Cynthia

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

    您好、Cynthia;

    不需要、10ms 延迟不是 MCU 要求。 当我在 读取命令和包含寄存器数据的帧之间使用它时、它才起作用。

    我们在命令 CS 引脚逻辑电平时测量了1.5us 脉冲持续时间。  

    这是我的 init 函数,问题是否来自错误的 init 序列?  

    uint8_t ADS7028_init(ADS7028_Device* Device)
    {
    	ADS7028_Reg reg_addr;
    	uint8_t read_reg_data = 0, reg_data = 0, ADS_mask = 0;
    
    	// configure channel
    
    	// Reset
    	ADS_mask = 0x01;
    	reg_addr = ADS7028_GENERAL_CFG;
    	ADS7028_set_bit_reg(Device, reg_addr, ADS_mask);
    
    	// Clear BOR flag
    	ADS_mask = 0x01;
    	reg_addr = ADS7028_SYSTEM_STATUS;
    	ADS7028_set_bit_reg(Device, reg_addr, ADS_mask);
    	// Configure conversion modes
    		// Manual
    		// Sequence
    		// Autonomous TODO
    
    	//
    }

    此致

    穆罕默德

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

    穆罕默德

    如果不包括延迟、您能否发送通信的逻辑分析仪或示波器快照?   在范围快照中包括时基。 第7.6节介绍了器件时序要求。  您不必在帧之间添加10ms、因此我怀疑我们可能会看到其他一些时序问题。

    艺术