jackfrost 发表于 2015-1-21 09:34

SHOW一下我的土炮逻辑分析仪,并分享用它调试AD7685 16BIT SAR ADC的过程

   逻辑分析仪是非常实用的设备,对于调试如SPI、I2C、UART、IIS等等协议堪称利器,比用示波器好千百倍。很多人在调试SPI的时候遇到问题,由于SPI协议本身比较宽松,很多芯片定义的SPI通讯并不相同,需要仔细阅读它的时序要求,比方说我下面要用到的AD7685,它2种CS模式,一种需要输出16个SCK,一种输出17个SCK,还有忙检测等,这些都是在基本的SPI协议上扩展的。另外很多时候我们用单片机写的通讯程序,自己看程序理解起来想当然地没问题,可是在实际操作当中有些潜在的小问题导致真正获得的时序跟目标芯片要求的时序还是有差别,调试的结果不符合我们的期待,百撕不得骑姐,于是就怪芯片不好,甚至说XX芯片真烂,唉~悲剧,事实上大家都明白真正的问题还是在自己:lol。这些时候如果有一个好的工具能帮你展示甚至分析线路上的逻辑,有时候一下子就能找到原因了。示波器虽然也一定程度上可以,但是毕竟一个存储深度不够,另外方面用旋钮调整操作始终不如电脑上用鼠标操作不是?
      这个土炮逻辑分析仪是我很多年前自己用感光板DIY的,0.2的线宽间距,自认为PCB做得还挺好:loveliness:。板上主要就是一片USB 2.0的通讯芯片CY68013A,我原本是拿来评估CY68013,打算用它跟FPGA通讯然后将采样数据上传到PC的,后来配置了下EEPROM,让他能跑SALEAE LOGIC的分析仪软件,于是它就成了我的土炮逻辑分析仪,别看简单,这个东东这么多年来可立下了大功,调试SPI I2C等协议的时候,妈妈从此再也不用担心了。

板子正面所有的IO信号线都引出了,PB0~7就是用作8个逻辑分析用的INPUT

背面PCB是自己画的,感光板做出来还挺精致的,一次成功,以前还做过EPM240 100PIN的感光板PCB,0.2MM的线宽都妥妥的

jackfrost 发表于 2015-1-21 09:35

本帖最后由 jackfrost 于 2015-1-21 10:03 编辑

      接下来将要出场的是AD7685 250KSPS 16BIT 2INL SAR ADC。这是一片10MSOP封装非常小巧,只有不到30mW的ADC,非常喜欢AD这个系列的ADC。由于是 SAR ADC,又是250KSPS的,因此对基准和驱动都是比较讲究的。ADC部分的电路图如下,这部分电路来自我2012年底自己DIY的一个LCR数字电桥,不同于传统的LCR数字电桥采用的开关同步鉴相模式,我是用的AD7685 16BIT高速采样,一次采样16K个点采集至STM32,然后用它做DFT分析(由于是已知定频,故用DFT来优化运算量),DFT后就可以分离出实部虚部,得到信号的相位角和振幅,I/V通道分别求出,最后就可以得到RLC电路的各种Z/ESR/C/L等等。由于采用了AD7685高分辨率ADC因此后来精度相当不错。另外扩展一下ADC采样后如果采用FFT来运算,还能分析出信号的失真度等等。因为完全只是自己纯玩玩的,所以用了像ADR444+AD8616+AD7685这样的组合,就任性了一把,价格不菲啊,全是自己淘宝上辛苦找的,还碰到假货,实际花的钱是芯片价格的N多倍了,唉~~
    基准采用ADR444 4.096V,经过AD8616缓冲之后驱动10UF电容做REF,AD8616另一个运放用做ADC驱动,采用了交流耦合反相放大器方式,抬高正相输入端电位,以适配AD7685 0~4V的输入要求。

上面是ADC及其外围电路,也是自己用感光板腐蚀的,单面板,丑了点,大家担待吧

    这个是当年自己做的LCR全貌正面写真,由于我的感光板只有10*15CM,所以只能放下这些模拟电路部分了,数字控制部分是外接了一块STM32F103ZE的开发板,用杜邦线连接的。受PCB板子限制只能画了固定一个频率的8阶滤波器,所以只有定频输出,没办法,穷啊,那时候还找厂家做PCB是件奢侈的事情:Cry:

      这个是犯罪现场,昨天把板子从柜子里翻了出来,将LCR的ADC部分连接到F429DISCOVERY板上,SPI四线通讯,同时将我的土炮逻辑分析仪跟4根数据线连接好,以便观察信号。因为是为了秀一下用逻辑分析仪调试SPI通讯,所以就只接了这部分。盒子的纸片上描述了三块板子之间连接的定义。

jackfrost 发表于 2015-1-21 09:35

本帖最后由 jackfrost 于 2015-1-21 10:10 编辑

    先来看看AD7685的时序,我是采用CS模式,SDI实际是上拉到VIO的,VIO实际是串了3个IN4148到5V,这样大致是3.8V左右,否则按照PDF高电平要求最低0.7*VIO,5V的话,STM32的3.3V GPIO就没法正常通讯了

    上面的时序看到,AD7685的SPI时序跟标准的还是有点差别的,当然这个还是很简单的,我也只是拿手头上的板子展示下用逻辑分析仪的方便性,大家就别计较了,呵呵。

jackfrost 发表于 2015-1-21 09:35

接下来是具体调试的过程

本帖最后由 jackfrost 于 2015-1-21 10:47 编辑

SALEAE LOGIC软件很好用,这里必须感谢原作者,软件是到他官方网站下下载的。他的软件界面是我见过最友好的,让人实在是爱不释手,虽然我后来也做过用CY68013A+EP2C8的100M的逻辑分析仪,但是软件方面实在是完全没法跟SALEAE LOGIC的同日而语,所以我还是坚持用这个。当然了它的缺点就是最高只有24MPT的采样率,也就是说只能分析不超过4MHZ的信号。不过一般单片机调试SPI I2C等等也够用了。这个东东在我大天朝的X宝上最便宜不到30元,当然都是山寨侵权的,不过这个就跟JLINK一样给广大内地的爱好者工程师带来了光明,所以我一直都是心存感恩的:victory:,再次感谢原作者!好了,不虚伪了,继续继续,呵呵   一开始,我程序这样写,(我只是这里展示下逻辑分析仪调试,所以别怪我任性喽,呵呵)
        AD7685_Init();

        CNV_1;
        DelayUs(1);
        i = 16;
        while(i--)        {
                SCK_1;
                DelayUs(1);
                SCK_0;
                DelayUs(1);
        }
        CNV_0;
        DelayUs(10);

在KEIL MDK中调试执行完AD7685_Init()之后暂停,SALEAE LOGIC 软件中我设置为CNV信号上升沿触发采样,如下:

    连续执行,于是我从分析仪上看到的是下面这样的,AD7685 SDO脚上的输出完全不对呀,SCK输出过程中SDO输出时钟高电平(初始化的时候是将SDO对应的GPIO设置成上拉的这样可以检测忙状态),直到CNV信号低电平后SDO信号才变低,于是对照时序我知道了,CNV信号的下降沿一段时间后才能有SDO输出

   于是我这样改
        CNV_1;
        DelayUs(10);
        CNV_0;
        DelayUs(1);
        i = 16;
        while(i--)        {
                SCK_1;
                DelayUs(1);
                SCK_0;
                DelayUs(1);
        }
        DelayUs(10);


   接下来的时序如上图,可见这下子正确了,同时我在SALEAE上设置了SPI协议解析,因此它能分析出SPI传输的具体数值,很直观方便。因为我的AD7685是电平抬高到4.096V REF的一半的,没信号的时候就正好是中值,没问题!
   接下来再试试CS三线带忙检测的方式吧,程序这样改
        CNV_1;
        DelayUs(1);
        CNV_0;
        while((SDO_IN));
        i = 17;
        while(i--)
        {
                SCK_1;
                DelayUs(1);
                SCK_0;
                DelayUs(1);
        }       


   于是又得到了这样的时序,由于是17个SCK,第一个SCK信号SDO是输出固定的低电平,从第二个SCK到第17个才是真正的数据,这时候标准的16BIT SPI协议解释就不对了,把读数移一位就OK。
    上面只是展示下SPI接口用逻辑分析仪调试的便捷性,抛砖引玉,只针对有些个在调试SPI通讯中遇到问题,百撕不得骑姐的,对逻辑分析仪这种高大上的武器又不了解的小盆友,希望大家遇到问题要静下心来仔细阅读PDF,同时利用好的工具可以事半功倍,不要怪这个社会道德沦丧人性泯灭,缺乏互助精神:lol通讯上遇到问题很难得到别人的帮助,因为毕竟环境器材不同,你只能是靠自己耐心去寻找问题解决问题。
      好了,打完收工,希望对同学们有帮助,谢谢大家。
   同时习惯性地要感谢党感谢政府感谢国家感谢CCAV,特别要感谢EEWORLD,我的F4DISCOVERY就是从论坛团购中抢得的(秒杀啊,哈哈),感谢ERIC、NMG。。。:victory:

bobde163 发表于 2015-1-21 10:20

楼主厉害

shinykongcn 发表于 2015-1-21 10:55

厉害,过来看看~~:loveliness:

kejoy 发表于 2015-1-21 11:45

hao ,厉害

dcexpert 发表于 2015-1-21 11:52

是不是可以在STM32F429Discovery上移植一个?

fsyicheng 发表于 2015-1-21 22:40

精神可嘉啊,赞一个:)

mass_lynnxy 发表于 2015-1-21 23:00

逻辑分析仪NB,貌似tb上已经有同款了?!!

jackfrost 发表于 2015-1-22 08:46

我这个土炮大概是08、09年的时候做的,其实就是个CY68013A开发板,后来那时候淘宝上还没有卖这种分析仪,后来就便宜啊,买个才30不到,还有外壳,又小巧,搞得都想再买个新的了。自己DIY总是这样,没有好的外壳,做了很多很多东东,都是裸着,玩到后来就嫌样子丑,都扔到箱子里吃灰了

lygogyl 发表于 2015-1-22 17:56

牛叉啊

machinnneee 发表于 2015-1-22 18:29

太牛叉了

exiao 发表于 2015-1-22 20:06

不错

zfz0122 发表于 2015-1-23 22:30

太牛叉了

电子-------- 发表于 2015-1-26 13:59

感谢楼主

lelee007 发表于 2015-1-27 00:27

界面好屌 的样子:sexy:

current02 发表于 2015-1-27 12:41

我是做维修的,业余玩单片机,总是觉得逻辑分析仪没有啥子用,看到楼主的帖子,才觉得是自己太肤浅了,顶顶帖子..................................................

cruelfox 发表于 2015-1-27 22:11

几年前买过一个USB blaster和逻辑分析仪一体的,里面就是68013。 采样速度低点,调单片机串口什么的没问题。软件强大,硬件倒是容易。楼主是DIP和SMD混用,单面板布线了得。

jackfrost 发表于 2015-1-27 22:53

cruelfox 发表于 2015-1-27 22:11
几年前买过一个USB blaster和逻辑分析仪一体的,里面就是68013。 采样速度低点,调单片机串口什么的没问题。软件强大,硬件倒是容易。楼主是DIP和SMD混用,单面板布线了得。
    68013用来和PC通讯速度算不错了,以前测试过能超过20MB/S,基本上USB2.0满速度了。不过这种USB2.0的片子出来很多年了,现在USB3.0的类似IC也没普及。单面板上DIP和SMD混用也是无奈,谁让咱穷呢:lol


页: [1] 2
查看完整版本: SHOW一下我的土炮逻辑分析仪,并分享用它调试AD7685 16BIT SAR ADC的过程