MFRCC522 SPI无法通讯【worldsing笔记】
2013-11-26 17:52
369 查看
用单片机于MRFC522与单片接时,加上485通讯后出现很诡异的像:
只要485芯片上有收到外部发送的信号时RC522就死掉,经过仿真卡在了SPI的收发部分(等待回复)
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
再测试,还没法通讯,把串口关了还是不行,此时得到的结论是:由于485总线上发送的数据叠加在RC522天线上,
或者是说由于485芯片上的信号导致的RC522无法工作。用示波器测量天线的发送信号,和485信号,电源。天线
信号幅值偏低,通讯时波动比较大。
解决办法:在RC522的电源上加大续流电容。
只要485芯片上有收到外部发送的信号时RC522就死掉,经过仿真卡在了SPI的收发部分(等待回复)
u8 MFRC522WriteByte(u8 Byte) { {int i = 0; while((SPI1->SR&0X02)==0 && i < 0xff) i++;} //等待发送区空 SPI1->DR=Byte; //发送一个byte {int i = 0; while((SPI1->SR&0X01)==0&& i < 0xff) i++;}; //等待接收完一个byte return SPI1->DR; //返回收到的数据 }
初步分析是因为485收到的数据过于频繁,导致RC522操作过程中被中断而超时,于是把485主机端发送停止掉,
再测试果然是,以为就是RC522通讯过程中不能中断,然后把RC522的SPI通讯部分改成不中断的:
u8 MFRC522WriteByte(u8 Byte) { __enable_irq(); {int i = 0; while((SPI1->SR&0X02)==0 && i < 0xff) i++;} //等待发送区空 SPI1->DR=Byte; //发送一个byte {int i = 0; while((SPI1->SR&0X01)==0&& i < 0xff) i++;}; //等待接收完一个byte return SPI1->DR; //返回收到的数据 __disable_irq(); }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
再测试,还没法通讯,把串口关了还是不行,此时得到的结论是:由于485总线上发送的数据叠加在RC522天线上,
或者是说由于485芯片上的信号导致的RC522无法工作。用示波器测量天线的发送信号,和485信号,电源。天线
信号幅值偏低,通讯时波动比较大。
解决办法:在RC522的电源上加大续流电容。
相关文章推荐
- 射频识别技术漫谈(6)——通讯协议概述【worldsing笔记】
- 射频识别技术漫谈(7)——ID卡【worldsing笔记】
- RS485连接CAN——应急用法【worldsing笔记】【待完善】
- Qt on_pushButton_clicked()的用法【worldsing笔记】
- Keil uCos 2.52 stm32 【worldsing笔记】
- STM32 SysTick定时器应用【worldsing笔记】
- msp430的两本书 电子版【worldsing笔记】
- uCos 之 TaskIdle() 注意事项【worldsing笔记】
- stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】
- Altium Designer快捷键 【worldsing笔记】
- emWin显示文本字符-【worldsing笔记】
- QTbaWidget控件几个例程 【worldsing笔记】
- 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】
- RC522天线匹配参数【worldsing笔记】
- 射频识别技术漫谈(14)——S50与S70存取控制【worldsing笔记】
- DS18B20 for STM32 源代码 【worldsing笔记】
- 超级MINI STLINK V2 官方固件自动升级 ST-Link 【worldsing 笔记】
- 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】
- emWin(ucGui)数值显示例程 -【worldsing笔记】
- Modbus Poll master-slave测试 Dtech USB转485(worldsing 笔记)