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.

[参考译文] DAC7565:SPI 通信问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1164697/dac7565-spi-communication-issue

器件型号:DAC7565

我们尝试将 DAC 7565集成到微控制器中、我们在 SPI 通信方面遇到了一个奇怪的问题、伪代码是

static void DacWrite( uint16_t dacChannel, const uint16_t dataToWrite){
uint8_t dacBuffer[3]{0};
HAL_GPIO_WritePin(DAC_ENABLE_GPIO_Port,DAC_ENABLE_Pin,GPIO_PIN_RESET);
uint32_t wrdata = dataToWrite << 4;
dacBuffer[1] = static_cast<uint8_t>((wrdata >> 8) & 0xff);
dacBuffer[2] = static_cast<uint8_t>(wrdata & 0xff);
HAL_GPIO_WritePin(DAC_SYNC_GPIO_Port,DAC_SYNC_Pin,GPIO_PIN_RESET);
DWT_Delay_us(1);
switch (dacChannel) {
  case DAC_CHANNEL_A: 
    dacBuffer[0] = 0x10;    
    break;
  case DAC_CHANNEL_B: 
    dacBuffer[0] = 0x12;
    break;
    case DAC_CHANNEL_C: 
    dacBuffer[0] = 0x14;
    break;
    case DAC_CHANNEL_D: 
    dacBuffer[0] = 0x16;
    break;
default:
return;
break;
}
HAL_SPI_Transmit(&hspi1, dacBuffer, 3, 10000);
HAL_GPIO_WritePin(DAC_SYNC_GPIO_Port,DAC_SYNC_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(DAC_ENABLE_GPIO_Port,DAC_ENABLE_Pin,GPIO_PIN_SET);
}


//Calling the dac function in a loop as follows:

for(int i =0;i<3000;i+=100){
    
  DacWrite(DAC_CHANNEL_A,i);
  DacWrite(DAC_CHANNEL_B,i);
  DacWrite(DAC_CHANNEL_C,i);
  DacWrite(DAC_CHANNEL_D,i);
  DelayMs(2000);
  }

我们面临的问题是、使用此代码时、只有 DAC A 更新、DAC C 更新为 DAC A 的值几乎两倍、DAC 中没有输出、DAC B 和 DAC D 从未更新、且它们始终为0。

但是,当代码在每个 DacWrite(.)上设置断点时 所有通道的 DAC 输出都正确。  

尝试了其他方法、其中使能引脚始终保持低电平、SYNC 变为低电平/高电平、用于 SPI 通信、结果相同。

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

    您好、Lakshmi、  

    由于它可以与断点一起正常工作、您能否将器件 SPI 和时钟连接到示波器、以查看是否存在可能的数据损坏或时钟不匹配?  

    谢谢、  

    Illia Volkov   

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

    我们发现、如果 将单通道更新的最高有效字节设置为10、11、12、13、它可以正常工作、根据数据表、它应该为10、12、14、16。 不知道为什么?

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

    您好、Lakshmi、  

    时钟相位似乎存在潜在问题。 尝试使用 DAC 数据表确认 MCU 时钟的极性、以确保它们一致。 或者、将您的线路连接到示波器、并使用示波器检查通信。 请随意将屏幕截图放在此处、以便我可以自己查看以更好地帮助您。

    谢谢、  

    Illia Volkov  

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

    这确实是一个时钟极性问题。

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

    没问题。 很高兴我能提供帮助。