TI中文支持网
TI专业的中文技术问题搜集分享网站

DAC61416正常运行与SPI通信

在使用SPI读取DEVICEID来验证SPI是否通信成功时存在SPI接受到的数据与发送数据一样问题,具体如下:

VDD(5V), VAA(5V), VCC(+12V), VSS(-12V), VIO(1.8V)电源均正常,先将DEV-PWDWN位置0来使芯片工作,按照数据手册中规定的SPI方式编写如下代码,
发现SPI_Receive收到的数据与SPI_Transmit一样,ID1[0]=0x81,ID1[1]=0x00,ID1[2]=0x00;而且REF引脚也未测量到2.5V电压,请问这是什么原因?

//Power-on Device
uint8_t ***[3]={DACX1416_SPICONFIG,0x0A,0x84};
SPI1_1_NSS_Enable();
HAL_SPI_Transmit(&hspi1, ***, 3, DACx1416_Timeout_3);
SPI1_1_NSS_Disable();

uint8_t cmd[3] = {0x81,0x00,0x00};
uint8_t ID1[3] = {0x00,0x00,0x00};
uint16_t DACX61416_ID = 0;
//0x81=23-16位,R/W读写位(1x)+DEVICEID Register 01h
SPI1_1_NSS_Enable(); /* Send the read ID command */
HAL_SPI_Transmit(&hspi1, cmd, 3, DACx1416_Timeout_3); /* Reception of the data */
HAL_SPI_Receive(&hspi1,ID1, 3, DACx1416_Timeout_3);
SPI1_1_NSS_Disable();
printf("%x%x\n",ID1[1],ID1[2]);
DACX61416_ID = ((ID1[1] << 8) | ID1[2]) & 0xFC;
printf("%x\n",DACX61416_ID);

Amy Luo:

您好,
您可以将您读取DEVICEID的SPI通信波形附上来吗

,

user6517830:

暂时未测SPI通信波形,能否先告知怎样判断DACX61416是否正常工作?根据数据手册,看到的是DEV-PWDWN位置0

,

Amy Luo:

是的,默认状态下设备是power-down模式,内部基准电压也是powers down状态,需要通过SPI配置寄存器

,

user6517830:

能否帮忙提供一下该芯片基于STM32CUBEMX HAL库的参考程序?

,

Amy Luo:

抱歉,没有参考程序可提供给您
SPI通信在数据手册9.5.1 Stand-Alone Operation有说明,通信时序图可查看Figure 50
如果您有EVM板的话,您可以使用EVM GUI以方框图或直接寄存器访问方式与设备寄存器进行交互

,

user6517830:

波形如下,发送0x03,0x0A,0x86,使芯片工作,怎样判断芯片是否工作呢?再发送0x81,0x00,0x00来读取DEVICEID,接收到的数据是0x81,0x00,0x00,即使发送0x81,0x01,0x02,接收到的数据是0x81,0x01,0x02,发送与接收一样,故怀疑DAC芯片未工作

,

Amy Luo:

写入之后能够正确读出来说明寄存器配置正确了
上图中黄色的信号是SCLK信号吗,绿色信号是SDI?这样的话发送0x03,0x0A,0x86使能设备,然后再读出来,看是否正确
请注意在对设备进行读写操作期间,cs信号需至少在24 个SCLK周期内是低电平

,

user6517830:

黄色是SCLK,绿色是SDI,CS片选信号在通信期间是低电平。发送0x03,0x0A,0x86是能设备,按道理就应该可以在REF 33 引脚测到2.5V电压,然后并没有;再发送0x81,0x00,0x00来读取DEVICEID,未接收到正确的ID,实际为0x81,0x00,0x00,即使发送0x81,0x01,0x02,接收到的数据是0x81,0x01,0x02,发送与接收一样,故怀疑DAC芯片未工作

,

Amy Luo:

内部基准电压使能需配置04寄存器
您可以把您读取寄存器的通信示波器图附上来吗

,

user6517830:

如下图所示,***,0x84,并使能REF

,

user6517830:

现在解决了,可以读取到ID,0x90,0x30,读取需分两步
//Power-on Deviceuint8_t ***[3]={DACX1416_SPICONFIG,0x0A,0x84};SPI1_1_NSS_Enable();HAL_SPI_Transmit(&hspi1, ***, 3, DACx1416_Timeout_3);SPI1_1_NSS_Disable();//Power-on Internal Referenceuint8_t GENCONFIG[3]={DACX1416_GENCONFIG,0x3F,0x00};SPI1_1_NSS_Enable();HAL_SPI_Transmit(&hspi1, GENCONFIG, 3, DACx1416_Timeout_3);SPI1_1_NSS_Disable();uint8_t cmd[3] = {0x81,0x00,0x00};uint8_t ID1[3] = {0x00,0x00,0x00};uint8_t ID0[3] = {0x00,0x00,0x00};uint16_t DACX61416_ID = 0;//0x81=23-16位,R/W读写位(1x)+DEVICEID Register 01h/* Send the read ID command */SPI1_1_NSS_Enable();HAL_SPI_Transmit(&hspi1, cmd, 3, DACx1416_Timeout_3);SPI1_1_NSS_Disable();/* Reception of the data */SPI1_1_NSS_Enable();//HAL_SPI_Transmit(&hspi1, ID0, 3, DACx1416_Timeout_3);//HAL_SPI_Receive(&hspi1, ID1, 3, DACx1416_Timeout_3);HAL_SPI_TransmitReceive(&hspi1, ID0, ID1, 3, DACx1416_Timeout_3);SPI1_1_NSS_Disable();printf("%x%x\n",ID1[1],ID1[2]);

,

Amy Luo:

很高兴您的问题得到解决,感谢您的反馈与分享

赞(0)
未经允许不得转载:TI中文支持网 » DAC61416正常运行与SPI通信
分享到: 更多 (0)