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.
主要问题:我已拔下/插入与 ADS1248EVM 板相连的 USB 电缆几次、浏览器插件指示灯似乎检测到 ADS1248EVM 板、因为它亮起红色、但重复报告"器件已断开连接"。
以下是我加载的驱动程序文件、请告知它们是否正确。
这是我将用于 ADS1248EVM 电路板的 Windows 驱动程序。
https://www.ti.com/tool/download/SBAC253
此驱动程序是否支持 Windows 11?
我使用的是最新的 Chrome Web 浏览器、Chrome 应该为
https://dev.ti.com/gallery/view/PADC/ADS1x48EVM_GUI
正常运行?
尊敬的 Tim:
关闭自述文件后可以显示 GUI 页面吗? 如果存在驱动程序问题、应该会出现另一个弹出框、解释 GUI 无法连接的原因。 驱动程序应该自动安装。 似乎您有批量驱动程序、但 EVM 也会枚举为 CDC。 因此、在设备管理器中、应该同时为 EVM 分配了 USB Bulk 和 COM 端口。 这两个驱动程序实际上都是 MS-OS 本机的,应自动安装。 但是使用下载也应该能够正确地分配它们。
对于 EVM、请确保两个板的方向正确。 在底板上、你看到有灯点亮了吗?你能否告诉我哪些灯点亮了(如果你想连接它、图片也会提供帮助)?
谢谢。
鲍勃 B
尊敬的 Bob、感谢您的回复。
自述文件会立即再次弹出、它基本上只包含一个 GUI、其中显示了 ADS 卡的图像以及我可以简要看到的一些 WebUI 界面按钮。 器件管理器中有 USB Bulk 和 COM 端口、是的、电路板方向正确、与.PDF pic 和指定 LED (D1、D2:顶部电路板)相比、TI 开箱即用。 (D1、D5:底板)如.PDF 中所述亮起。
尊敬的 Tim:
很抱歉您遇到问题。 如果单击"不再显示"、然后关闭自述文件、会发生什么情况? 安装 TICloud 代理时可能存在一些问题。 问题似乎更多的是 GUI 方面、而不是硬件方面。 因此、我认为这不是驱动器问题。
此致、
鲍勃 B
现在一切正常。 问题是管理员权限! 我的 IT 部门已登录并重新安装了具有管理员权限的驱动程序。 我现在能够检测 ADS1248板、查看寄存器等。
再次感谢。
尊敬的 Tim:
我很高兴听到您的工作正常。 感谢您分享您的决心。
此致、
鲍勃 B
问:是否可以将 DC098-A 板从 DC081A 板上取下并仅通过 SPI 总线连接到 STM32H735G-DK 等其他板上?
我将其(DC098-A)连接到 STM32H735G-DK、但在复位/上电后无法读回 ADS1248默认寄存器。
谢谢。
尊敬的 Tim:
可以、您可以断开两个电路板的连接并使用不同的微控制器。 DVDD 和 AVDD 电源都必须处于标称电压、RESET 引脚被拉高、START 引脚被拉高以读取和写入寄存器(请参阅数据表中表19下的注释)。
此外、如果使用 CS、则需要在整个通信事务中保持低电平。 如果 CS 在字节之间切换、则每次 CS 变为高电平时、通信都将取消。 通常、这要求 CS 由 GPIO 控制。
此致、
鲍勃 B
我重新检查了所有内容、甚至从2MHz 将 SCLK 设置为1MHz。 Im 在使用方面遇到困难、 因为该芯片可与自己的 EVAL 主板配合使用、非常简单。 哈哈。 :-), 是否可能我的电线太长?
再次感谢。
时间
尊敬的 Tim:
我建议将 START 引脚设置为高电平、并通过监控 DRDY 来查看输出是否以默认数据输出速率脉冲、从而查看器件是否处于活动状态。 如果不是、则需要重新检查连接、主要是+5V、+3.3V、GND、复位和启动。
如果 DRDY 会产生脉冲、则器件处于运行状态。 布线可能是个问题、但我看到了很多更糟糕的问题、因此您应该能够进行通信。 通过示波器检查 SCLK、DIN 和 DOUT 的信号完整性。 确保 Micro SPI OUT 位于 DIN 上、DOUT 连接到 Micro SPI IN。
如果仍有问题、请向我发送通信的一些示波器或逻辑分析仪快照、以帮助进行故障排除。
此致、
鲍勃 B
+5V: 良好
+3.3V: 良好
GND: 良好
复位:高电平
启动:高电平
SCLK 和 DRDY:(脉冲)
SCLK 和 DIN:
SCLK 和 DOUT_DRDY:
尊敬的 Tim:
我不清楚示波器截图。 有什么方法可以同时显示至少 DIN、DOUT 和 SCLK? 对于这张图片、看起来您将其标记为 SCLK 和 DIN:
因此、如果是 DIN、则命令的开头不正确、因为0x80不是有效命令。 最有用的是展示完整的通信、并告诉我您尝试发送/接收的内容。
此致、
鲍勃 B
Bob 您好!
继续感谢你的全力支持。
下面是我为使 ADS1248退出复位而编写的一个简短而简单的测试
写入其寄存器以设置 ADC 转换并读回寄存器值
(MUX0)以查看我的其中一个 Reg 配置设置是否已正确写入。
我将抓取另一个示波器探头并显示 SCLK、D_IN 和 D_OUT。
时间
#define ADC1248_RREG_CMD 0x20
#define ADC1248_WREG_CMD 0x40
void RTD_NumReg (uint8_t uRegNum、uint8_t Read_Reg)
{
uint8_t ADC1248_CMD [15 + 2]={0};
uint8_t ADC1248_MISO [15 + 2 ];
INT n = 0、I =0;
memset (ADC1248_MISO、0、sizeof (ADC1248_MISO));
ADC1248_CMD [ 0 ]=( ADC1248_RREG_CMD | uRegNum );
ADC1248_CMD [ 1 ]= uNumReg;
if (HAL_SPI_TransmitReceive (&hspi5、(uint8_t*) ADC1248_CMD、(uint8_t *) ADC1248_MISO、(uNumReg + 1)、5000)!= HAL_OK)
{
Error_Handler ();
}
HAL_DELAY (10);
}
void RTD_Val (uint8_t uRegNum、uint8_t Write_Reg)
{
uint8_t ADC1248_CMD [15 + 2]={0};
uint8_t ADC1248_MISO [15 + 2 ];
ADC1248_CMD [ 0 ]=( ADC1248_WREG_CMD | uRegNum );
ADC1248_CMD [ 1 ]= 0;
ADC1248_CMD [ 2 ]= uRegVal;
if (HAL_SPI_TransmitReceive (&hspi5、(uint8_t*) ADC1248_CMD、(uint8_t *) ADC1248_MISO、35000)!= HAL_OK)
{
// debug_printf ("ADS1248 RTD_ADC_ Write_Reg failure!!!\r\n");
//debug_printf ("ADS1248 stopped.\r\n");
while (1);
}
HAL_DELAY (10);
//debug_printf ("ADS1248 RTD_VAL:%s、Write_Reg:%.2xh\r\n"、ADS1248_reg_names[uRegNum]、uRegVal");
}
int ADS1248_Init (void)
{
HAL_GPIO_WritePin (RTD_nRESET_GPIO_Port、RTD_nRESET_Pin、0);
HAL_DELAY (60);
HAL_GPIO_WritePin (RTD_nRESET_GPIO_Port、RTD_nRESET_Pin、1);
HAL_DELAY (600);
//debug_printf ("ADS1248:重置结束\r\n ");
HAL_GPIO_WritePin (RTD_START_GPIO_Port、RTD_START_Pin、1);
HAL_GPIO_WritePin (RTD_nCS_GPIO_Port、RTD_nCS_Pin、0);
HAL_DELAY ( 600 );
RTD_MUX Write_Reg ( MUX0 ,(MUX_SP2_AIN2| MUX_SN2_AIN3));
RTD_VBIAS( Write_Reg ,(VBIAS_3| VBIAS_2 ));
RTD_REF0 Write_Reg (MUX1,(REFSELT1_REF0 | MUXCAL2_REF0 ));
RTD_SYS0 ( Write_Reg ,(PGA2_0| DOR3_1000));
RTD_OFC0 (Write_Reg 0、0x01);
RTD_PIN (IDAC0、Write_Reg);
RTD_IDAC1 (Write_Reg、0xCC);
RTD_GPIOCFG ( Write_Reg , CFG_ANALOG_INPUT_MODE );
RTD_GPIODIR (Write_Reg,0);
RTD_GPIODAT (Write_Reg,0);
返回0;
}
int main (空)
{
ADS1248_Init ();
while (1)
{
RTD_MUX Write_Reg ( MUX0 ,(MUX_SP2_AIN2| MUX_SN2_AIN3));
RTD_MUX0 Read_Reg (MUX0,1 );
HAL_DELAY (1000);
}
返回0;
}
尊敬的 Tim:
如果存在问题、很难判断是否读取了您的代码。 通信的示波器截图实际上是验证的唯一方法。 我假设 HAL_DELAY ()以毫秒为单位,对吗?
此致、
鲍勃 B
早上好、Bob、
是的、正确、HAL_DELAY 的单位为毫秒。 仍在查找其他探头或逻辑分析仪...
尊敬的 Tim:
您至少可以设置一个断点并捕获 SCLK 和 DIN 以进行寄存器写入、并告诉我此时应该发生什么情况?
谢谢。
鲍勃 B
我只是调用 init 函数来重置芯片、并 将 nRESET、 nCS、开始 为高电平。
然后将0xFF 写入寄存器 MUX0。 断点在 Write_Reg 函数中的 HAL_SPI_TransmitReceive 后立即设定:
if (HAL_SPI_TransmitReceive (&hspi5、(uint8_t*) ADC1248_CMD、(uint8_t *) ADC1248_MISO、35000)!= HAL_OK)
ADS1248_Init ()
{
HAL_GPIO_WritePin (RTD_nRESET_GPIO_Port、RTD_nRESET_Pin、0);
HAL_DELAY (60);
HAL_GPIO_WritePin (RTD_nRESET_GPIO_Port、RTD_nRESET_Pin、1);
HAL_DELAY (600);
//debug_printf ("ADS1248:重置结束\r\n ");
HAL_GPIO_WritePin (RTD_START_GPIO_Port、RTD_START_Pin、1);
HAL_GPIO_WritePin (RTD_nCS_GPIO_Port、RTD_nCS_Pin、0);
返回0;
}
RTD_MUX0 (Write_Reg、0xFF);
尊敬的 Tim:
遗憾的是、我没有看到全部24个 SCLK、但我可以从数据的开始位置进行猜测。 使用 FF 向 MUX0写入寄存器需要写入寄存器命令(0x40 +寄存器位置(MUX0 =地址0x00))+要写入的寄存器数量减去一(一个寄存器为0x00) +数据(0xFF)。 除了 SPI DIN 必须在 SCLK 的上升沿发生变化并在下降沿保持稳定外、它看起来就像在做的那样。 因此、您将需要更改 SCLK 的相位设置。
此致、
鲍勃 B
在该屏幕截图中、I Init ADS1248、WReg 0xFF to MUX0 、然后 从 MUX0执行 RReg。 MUX0应为0xFF、但我每次都会看到随机数据。
[1] SCLK
[4]
[3]输出
ADS1248_Init ();
RTD_MUX0 (Write_Reg、0xFF);
RTD_MUX0 Read_Reg (MUX0,1 );
尊敬的 Tim:
根本不清楚这最后一个示波器屏幕截图试图显示的内容。 SPI 为全双工、看起来像是从器件进行读写操作。 读取寄存器命令(RREG)与 WREG 命令类似、这是因为该命令有两个字节、后跟数据。 因此、您可以发送0x20 0x00 0xFF (即 NOP)以读取 MUX0寄存器。
此致、
鲍勃 B
我显示了我正在将0xFF 写入 MUX0、然后再读回它。 我在 WReg ()和 RReg ()函数中放置一个断点以捕获此值。
我从未看到 RReg 中的数据缓冲区随0xFF 返回、它是0x00、0x33或0x80。
那么、是的、我的定义为:
#define ADC1248_RDTA_CMD ( 0x12 )
#define ADC1248_RREG_CMD (0x20)
#define ADC1248_WREG_CMD ( 0x40 )
#define ADC1248_NOPR_CMD ( 0xFF )
具体代码为:
RTD_MUX0 (Write_Reg、0xFF);
RTD_MUX0 Read_Reg (MUX0,1 );
SPI 设置:
尊敬的 Tim:
这便是您的代码信息。 为我解释您在上一个示波器屏幕截图中显示的16个 SCLK。 RREG 或 WREG 命令都需要24个 SCLK。 您发送到 ADS1248的最后一个数据不是 NOP。 ADS1248的技术底蕴并不比您想说的更深。
您是否已将相位更改为正确的值并再次捕获示波器屏幕截图?
此致、
鲍勃 B
每当我执行发送/接收时、16个 SCLK 都由 STM32H HAL SPI 函数控制。
我没有尝试发送 NOP、只是将0xFF 写入 MUX0并读回。
ADS 希望 SCLK 相位设置为:
CPOL: 低
CPHA:1边缘
正确吗?
尊敬的 Tim:
您必须查看处理器的数据表、以了解 CPHA 应为0还是1。 由于示波器屏幕截图上当前是错误的、并且您使用的是1、因此它必须为0。
就通信而言、您必须在发送/接收功能中向外设发送错误数据。 无论您是使用 RREG 还是 WREG 命令、都应始终有24个 SCLK。 前两个字节是命令、最后一个字节是数据。 因此数据应始终传输3个字节。 这意味着对于 RREG 命令、您需要发送两个命令字节(0x20 0x00)和一个 NOP (0xFF)。 由于您不发送 NOP、因此从不会发送 SCLK 的最后一个字节(会产生16个 SCLK 而不是24个 SCLK)。 在内部、写入发送缓冲器会启动 SCLK。
对于寄存器数据、内容将位于数组 ADC1248_MISO[]的第3个字节中。
在再次查看您的代码后、我认为我看到了问题。
void RTD_Read_Reg ( uint8_t uRegNum, uint8_t uNumReg ) { uint8_t ADC1248_CMD [ 15 + 2] = { 0 }; uint8_t ADC1248_MISO [ 15 + 2 ]; int n = 0, i =0; memset ( ADC1248_MISO, 0, sizeof(ADC1248_MISO)); ADC1248_CMD [ 0 ] = ( ADC1248_RREG_CMD | uRegNum ); // this is ok ADC1248_CMD [ 1 ] = uNumReg; // This should be number of registers less 1 so when reading 1 register it shoudl be 0 // you also need to send the NOP ADC1248_CMD [ 2 ] = 0xFF; // If uNumReg value is requesting more than one byte of data then you need to send additional NOPs // For example, the RDATA command to read back conversion results is the command and three bytes of data for a total of 4 bytes transmitted // The following is incorrect for the number of bytes as you are giving uNumReg + 1 // If the uNumReg = 1, then for reading back 1 register you need to add 2 so that 3 bytes are sent (2 command bytes + NOP) if (HAL_SPI_TransmitReceive(&hspi5, (uint8_t*)ADC1248_CMD, (uint8_t *)ADC1248_MISO, (uNumReg + 1), 5000) != HAL_OK ) { Error_Handler(); } HAL_Delay (10); }
此致、
鲍勃 B
再次感谢你的所有帮助鲍勃,我终于得到了这项工作后,注意到细节。
尊敬的 Tim:
恭喜! 当事情开始工作时、始终感觉良好。
此致、
鲍勃 B