接下来是具体调试的过程
SALEAE LOGIC软件很好用,这里必须感谢原作者,软件是到他官方网站下下载的。他的软件界面是我见过最友好的,让人实在是爱不释手,虽然我后来也做过用CY68013A+EP2C8的100M的逻辑分析仪,但是软件方面实在是完全没法跟SALEAE LOGIC的同日而语,所以我还是坚持用这个。当然了它的缺点就是最高只有24MPT的采样率,也就是说只能分析不超过4MHZ的信号。不过一般单片机调试SPI I2C等等也够用了。这个东东在我大天朝的X宝上最便宜不到30元,当然都是山寨侵权的,不过这个就跟JLINK一样给广大内地的爱好者工程师带来了光明,所以我一直都是心存感恩的
,再次感谢原作者!好了,不虚伪了,继续继续,呵呵 一开始,我程序这样写,(我只是这里展示下逻辑分析仪调试,所以别怪我任性喽,呵呵)
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,同时利用好的工具可以事半功倍,不要怪这个社会道德沦丧人性泯灭,缺乏互助精神
通讯上遇到问题很难得到别人的帮助,因为毕竟环境器材不同,你只能是靠自己耐心去寻找问题解决问题。
好了,打完收工,希望对同学们有帮助,谢谢大家。
同时习惯性地要感谢党感谢政府感谢国家感谢CCAV,特别要感谢EEWORLD,我的F4DISCOVERY就是从论坛团购中抢得的(秒杀啊,哈哈),感谢ERIC、NMG。。。
本帖最后由 jackfrost 于 2015-1-21 10:47 编辑