完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
采用AD9789,遇到以下问题,求大神解答!
上电手动复位后,对芯片进行写操作无响应,无论写入什么数据,读取状态寄存器结果都是0xFF,示波器观察SPI管脚时序无误, 上电后,不进行任何配置,从SDO端口读寄存器默认状态,读出结果都是0xFF, 另外,芯片有1.2V的参考电压输出正常。 附件中有读和写的时序图。 求助其他可能原因及解决方法。谢谢。 |
|
相关推荐
9个回答
|
|
您好!从您发出来的时序看,干扰较严重。建议上电稳定后通过引脚reset一下芯片。
|
|
|
|
|
|
|
|
zmyecho 发表于 2018-11-14 17:55 建议您用示波器抓一下程序运行后的时序。 |
|
|
|
工程师您好,我现在把时序图帖出来。我是用DSP F2812控制AD9957,使用DSP的GPIO模拟SPI协议,程序是参照AD官网9910的代码写的。 黄色为CH1,是CS;另一个为SCLK,可以看出,SCLK分为前8和后16两部分,分别写指令和数据。 图中,通道2为SCLK,黄色为SIMO,可以看出指令字节为0xc5,控制字为0xc2,这只是测试时序用的。 请您看一下时序是否有问题。 另外,从AD9957读回来的数据总是0xffff。PLL_LOCK和PDCLK始终为低电平,说明控制字没有写进去。 谢谢! |
|
|
|
zmyecho 发表于 2018-11-14 18:21 你可以读下一些默认寄存器的值,看是否正确? |
|
|
|
|
|
|
|
您好!我试了一下,读出来的还是0xFFFF,说明我的读程序是错的吧?我是参照示例代码9910写的,具体如下: void ReadFromAD9957ViaSpi(unsigned char RegisterAddress, unsigned char NumberofRegisters, unsigned char *RegisterData) { unsigned char ControlValue = 0; signed char RegisterIndex = 0; unsigned char ReceiveData = 0; unsigned char i = 0; unsigned int iTemp = 0; //Create the 8-bit header, ControlValue = RegisterAddress; ClrClk; mDelay(40); SetCS; //SET_CS(); mDelay(80); ClrCS; //CLR_CS(); //bring CS low mDelay(40); // SDA_OUT(); //Make SDIO an output //Write out the control word,先发送指令字节 for(i=0; i<8; i++) { ClrClk; //CLR_SCL(); mDelay(40); if(0x80 == (ControlValue & 0x80)) { SetData; //SET_SDIO(); //Send one to SDIO pin } else { ClrData; //CLR_SDIO(); //Send zero to SDIO pin } //mDelay(40); SetClk; // SET_SCL(); mDelay(40); ControlValue <<= 1; //Rotate data } ClrClk; mDelay(80); // SDA_IN(); //Make SDA an input //Read data in,然后读数据 for (RegisterIndex=NumberofRegisters; RegisterIndex>0; RegisterIndex--) { for(i=0; i<16; i++) { ClrClk; //CLR_SCL(); mDelay(40); iTemp = GpioDataRegs.GPFDAT.bit.GPIOF1; ////Read SDIO of AD9957 ,GpioDataRegs.GPFDAT.bit.GPIOF1是DSP F2812的一个GPIO口,和9957的SDO连接。 if(0x00000001 == (iTemp & 0x00000001)) { ReceiveData |= 0x0001; } else ReceiveData &= 0xfffe; //mDelay(40); SetClk; //SET_SCL(); mDelay(40); if ( i == 15) break; else ReceiveData <<= 1; //Rotate data } * (RegisterData + RegisterIndex - 1) = ReceiveData; ReceiveData = 0x0000; } ClrClk; mDelay(40); SetCS; //SET_CS(); //bring CS high again mDelay(80); } 麻烦您帮我看一下,我调了很多天都没有成功。 |
|
|
|
zmyecho 发表于 2018-11-14 18:53 读的时候,指令BYTE中D7应该是1。在您的程序中,ControlValue = RegisterAddress这一语句没有反应这一点,不是读操作,而是写操作。 |
|
|
|
dang28 发表于 2018-11-14 19:07 建议您下次发帖的时候,新的器件重新发一个贴。不同的器件在一个贴中讨论不利于大家的浏览,谢谢您的配合! |
|
|
|
只有小组成员才能发言,加入小组>>
992 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1387 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1940 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4271 浏览 2 评论
9063 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1526浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1694浏览 2评论
993浏览 2评论
1671浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1387浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:42 , Processed in 0.806688 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号