HFC-S mini芯片调试心得

经过接近2周的艰苦努力,终于搞定了HFC-S  mini芯片(下面简称为HFC芯片),我这算是比较顺利的了,毕竟是在其他同事的成功经验基础上,少走了很多弯路,但是在调试过程中还是遇到了一些问题,现整理如下:

1、片内RAM测试
      在HFC初始化之后芯片不能正常收发数据,即使自环测试也不行。后来在初始化代码中,在最初读取芯片ID以后就进行片内RAM读写测试,结果发现片内RAM读写不正常。经过硬件设计人员的检查,发现是硬件问题,给该芯片提供时钟的电路中有一个电容焊错了,换上正确的电容以后就没问题了。

      测试片内RAM读写是否正常,是确认问题是属于硬件问题还是软件问题的一个重要手段,尤其在调试初期一定要进行这样的测试,以便快速定位问题,缩短解决时间。

2、接收数据读长度要正确
      自环测试接收数据,发现读取的STAT字节的值不是0,但是检查接收的数据长度以及数据内容,都是正确的。阅读资料发现,HFC接收数据的结构是:DATA + CRC1 + CRC2 + STAT,而读取A_Z1、A_Z2寄存器计算得到的数据长度包括DATA、CRC1、CRC2,从A_FIFO_DATA寄存器读取数据的次数一定要等于数据长度,如果读的次数多了,就会得到错误的STAT值。

      检查代码发现因为CRC1、CRC2都是芯片自己添加的内容,上层应用是不需要的,因此代码中将DATA段数据读取到数据缓冲区,而CRC1、CRC2另外读取,但是在读取DATA段数据的时候数据长度没有 -2,导致实际上多读了2次数据,STAT值错误。

3、变量注意增加volatile
      现象同上,还是读取数据的STAT字节的值不是0,整个读取数据代码如下:

            len -= 2;
            while (len-- != 0)
                *pRec++ = hfcReg[A_FIF_DATA];
           
            z1 = hfcReg[A_FIF_DATA];
            z2 = hfcReg[A_FIF_DATA];
            stat = hfcReg[A_FIF_DATA];
            hfcAdr(W_INC_RES_F)=V_INC_RES_F_INC;

      hfcReg数组直接访问的就是HFC芯片的寄存器,检查汇编代码发现,编译器在编译的时候对代码进行了优化,在读取z1的时候,编译器将hfcReg[A_FIF_DATA]的内容读到内部寄存器,z2和stat变量在赋值的时候不是从硬件地址读取,而是直接从内部寄存器取值,当然会产生错误。修改hfcReg变量的定义如下:

      volatile unsigned char xdata hfcReg[HFC_REG_NUM] _at_ ADR_CS_HFC_MIN;

      增加volatile关键字,防止编译器对该变量进行优化。总的来说,在编写嵌入式系统地程序时,对于访问硬件地址的变量,一定要在变量定义时增加volatile关键字,因为这些变量的值不但来自于程序修改,还来自于硬件的变化,对于这些变量,就不能让编译器进行优化,以免产生不可预料的后果。

4、长短帧的问题
      有两个板子使用HFC进行互相通信,结果发现从板A发送给板B的数据是正确的,反之却是错误的,接收数据长度少了1个字节。

      经过检查发现,板A采用的是短帧,板B使用的是长帧,两者帧长度不匹配,将两者修改为统一,问题解决。

      HFC芯片支持两种不同的帧长度,分别是244ns和488ns,具体使用的是哪一个帧长度取决于硬件的设计,在软件中应该根据硬件的设计,设置R_PCM_MD0寄存器的V_F0_LEN字段。

5、自环测试要延时
      在进行板间通信之前,首先要自环测试,以确认HFC芯片初始化和数据收发是否正常。实际自环发现接收的数据第一个字节总是错误,后面的字节是正确的。

      经过检查代码发现,发送数据后立刻检查接收帧计数器,判断有数据接收到就进行了接收处理。这样没有给HFC芯片足够的内部处理时间,于是在发送数据后增加了一小段延时,等HFC芯片内部完成发送以后,再读数据就正确了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值