NXP

NXP的CLRC663和ST的M24LR04通信时所遇到的问题

2019-07-12 11:32发布

射频芯片:NXP的CLRC663. 标签:ST的M24LR04 M24芯片出厂时的配置寄存器(见图1)设置的是0XF04,这样的设置是只能够读到UID,芯片不能够接收能量的。所以TAG上MCU程序里有一句话:     M24LR04E_ReadOneByte(M24LR16_EEPROM_ADDRESS_SYSTEM, 0x0910, judgement);
    if(judgement[0] !=0xF3)
    {
      M24LR04E_WriteOneByte (M24LR16_EEPROM_ADDRESS_SYSTEM, 0x0910, 0xF3);     }     这样做的目的是先读这个配置寄存器,如果不是0XF3就会通过IIC来将这寄存器设置为0XF3。这样可以使每一个TAG在烧完程序后不用匹配就可以读数。                                                                                图1     但是在TAG在多次读写或经过高频场强的盘点设备后,有可能这个配置寄存器里的值会变成0XFF,这样的情况是随机发生的,发生概率是10%左右。寄存器的值变成0XFF后使TAG不能工作。     在经过多次查找后发现如果屏蔽上面MCU里的那个语句,就可以完全避免这种情况。但是上面那个语句是为了减少生产时匹配寄存器这一工序,所以必须要有类似的操作存在,来减少匹配这一工序。所以我想的解决方法是让上面那个读写语句只执行一次,即在读配置寄存器之前读一次某个块的值。芯片块里面的值初始值都是0XFF,下载器下完程序后让芯片运行一次,第一次运行的时候,读到块里的值时0XFF,然后就可以来读写配置寄存器的值,因为这个块里面值在程序第一次运行时就会被改写,而且改写的值不会变为0XFF。所以我想的是以后就不会再执行读写配置寄存器的值。    在请来ST的售后人员之后,他们说可能是我们的IIC在读的时候可能产了误读操作,然后又有一个误写操作,可是我们MUC是ST公司的STM8,这两个语句所用的程序都是调用库里的。他们通过设备查找后我们的芯片在IIC操作时会发生掉电的情况,但是看波形发现掉电后极短的时间IIC通信会恢复。因为寄存器配置位0XF3,使M24最大工作电流为300uA。我们芯片工作时最大电流确实会达到1mA左右,确实可能出现如ST人员所说的掉电的情况,但是通信会恢复ST人员没有给出解释,之后ST人员就拿了几块板子回去研究具体掉电的原因,ST人员给了一个相应的解决方法就是在读配置位的时候加一个消抖的过程,就行相当于读两次配置位。这样确实可以降低误读产生误写的情况,但这不是根本解决问题的方法。在这篇总结文时ST人员还是没有回复具体掉电的原因。   因为明白TAG在工作时产生对配置位误读和误写的操作,所以最根本的解决方法就是TAG在工作时不对配置位进行读写,由Reader通过射频来对配置位进行一次读写,之后Reader就不在对配置位进行读写。所以想的方法是做一个专门将配置位写成0XF3的Reader。   之后再调试Reader时发现663芯片的程序库里只有标准的15693通用命令和程序,而改配置位是ST公司自己定义的命令和自己定义的数据接收格式。为了让663芯片发送M24改配置位的命令和数据格式,只能一步步看663的库是如何调用的,663的数据发送格式该如何修改,在一顿调试和追踪后,发现NXP公司在库函数里其实为用户预留的改格式的语句。只需要将相应的命令自己定义好,NXP公司定义的制造商MFC改成ST的MFC,MFC判断的语句扩大到包含ST的MFC CODE即可。