请教FM1702无法读卡的原因?(附RFID资料,给需要的人)

2020-02-05 09:21发布

程序运行到1702初始化的时候有一句
        while((temp = SPIRead(Command)) != 0)                        /* 等待Command = 0,FM1702复位成功 */
        {
        ;//        _nop_();
        }
然后程序就卡住了。SPIRead()貌似每次都不为零,有几种可能的原因呢?
软件是直接从别的地方移植过来的,我只修改了管脚定义而已。莫非硬件有问题?

还有就是请教一下
unsigned char SPIRead(char reg_ad)
{   char temp;
    RF_SCK=0;
     _nop_();
     _nop_();
    RF_NSS=0;
    reg_ad <<= 1;
    reg_ad |= 0x80;
    spi_byte_transceive(reg_ad);
    temp=spi_byte_transceive(0x00);
    RF_NSS=1;
    return (temp);
}

void SPIWrite(char reg_ad,char reg_data)
{   
    RF_SCK=0;
    reg_ad <<= 1;
    RF_NSS=0;
    reg_ad &= 0x7F;
    spi_byte_transceive(reg_ad);
    spi_byte_transceive(reg_data);
    RF_NSS=1;
    return;
}

在上面两个函数中,为什么reg_ad要进行变换?
请大家多多来鄙视吧。
附我现在用的刷卡机程序和图纸。

刷卡程序使用STC12C5A60S和KEILV4,FM1702NLourdev_573191.rar(文件大小:99K) (原文件名:刷卡程序使用STC12C5A60S和KEILV4.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
watch1030
1楼-- · 2020-02-06 09:36
我也碰到到了一样的问题,楼主解决了吗
cocotan_2009
2楼-- · 2020-02-06 12:27
一。运行到while((temp = SPIRead(Command)) != 0)卡死
Command不为零有可能是SPI复位不成功。

二。为什么reg_ad要进行变换?
那是因为fm1702寄存器的地址格式要求:
1。最低位必需为零
2。最高位如果是写的话置0,读就置1。
yanrz
3楼-- · 2020-02-06 18:18
 精彩回答 2  元偷偷看……
castlehu
4楼-- · 2020-02-06 22:04
回复【8楼】cocotan_2009
-----------------------------------------------------------------------

3Q
castlehu
5楼-- · 2020-02-06 22:31
回复【6楼】happywxg
-----------------------------------------------------------------------

3Q
castlehu
6楼-- · 2020-02-06 23:44
1702SL开发板源码ourdev_594540YWVNT2.rar(文件大小:94K) (原文件名:1702SL开发板源码3.rar)
上传个参考代码,基本上改改寄存器,和延时程序就可以用了。如果不能用,差不多就是硬件问题了。

一周热门 更多>