这两个星期重点调试了新作的freescale的s08开发板(NSS08Kit-R1)。到今天终于全部调试完成,板子在画原理图的时候居然笔误把PS2接口的CLK接错了,下次改版要修正这个小错误,其他的均没什么问题。我用的主芯片是MC9S08AC16,因为它比较便宜。但这个板子上留了20,16,8pin的DIP座子,因此可以支持HCS08和RS08系列所有DIP20,DIP16,DIP8的MCU,5V的或者3.3V的都支持。
在调试过程中遇到些原先没有预料到的问题,总结下:
1.BDM仿真器的问题。我用的是OSBDM,北京那家freetech去年做活动的时候我申请了个免费的S08 BDM,最近在淘宝上也买了个OSBDM。两个是差不多的,开始调试的时候BDM只成功了一次,此后再也无法连接hardware,先是怀疑CW装的问题,就卸载重新安装+所有补丁,结果重新安装后也不行,又怀疑我的笔记本电脑有问题,找了台台式pc,新装的xp系统,安装cw后,发现只有第一次下载程序的时候成功,此后再也无法连接。在这个问题上我折腾了两天,也问了淘宝上卖我BDM的那个伙计,他也不知道什么原因。最后我是怀疑OSBDM是破烂货,准备花钱去买个PE Multilink。但是那天晚上,我突然想OSBDM基于的那个libUSB是否有问题,因为windows下的驱动程序我以前做过不少,说实在的,我还是怀疑libUSB的作者的水平。看了下libUSB的代码,一时也发现不了什么不足,不过冒出个念头,是否freetech光盘中带的那个驱动和淘宝上那个伙计给我的驱动有问题,就去freescale的网站上下了个驱动,装上后果然一切OK;最后确认OSBDM还是可以的,但那个驱动还是做的不够稳定。
2.在一个程序中发现单片机的ICG总是锁不定主频,导致MCU频繁复位,跟踪后发现是sprintf这个函数惹的货,由于我忘记包含头文件stdio.h,导致每当调用sprintf的时候,程序就跑飞,最后导致复位。#include <stdio.h>后解决问题
3.后又发现即使include了stdio.h,有时候调用sprintf也会导致mcu复位,跟踪后确认原因是堆栈溢出。默认的codewarrior定义的堆栈大小是0x50个字节,sprintf内部消耗了大量的stack,因此0x50个字节有时候会不够用,我改成0x100后问题解决
4.最后就是那个SPI接口,SPI本来很简单,没想到这次在这个上面居然花了一天多时间才搞定,NSS08Kit-R1上有个at93c46,mcu通过spi访问它。我发现怎么搞都无法正常读写。把spi的那几个寄存器看了N遍,试了各种情况(比如CPOL,CPHA的所有组合)都不行。后怀疑是93c46买的是假货,为了确认这点,就绕开了mcu的spi,而是用gpio用软件模拟spi时序读写93c46,结果发现读写正常,说明芯片本身没问题。最后又花了半天时间,确认了错误原因,现在OK了
NSS08Kit-R1到此算完成开发了;下面还有快coldfire mcf52211的板子要调试,希望尽快搞定,此外答应人家做的freescale i.mx27的板子也要动手画电路了。
用户1454352 2009-5-10 00:14