D13~D15为命令类型,MCP2030根据命令类型确定后续的数据含义并执行相应的操作。其中,0x07为写数据命令,0x06为读数据命令。如果是写数据或读数据命令,则后续D9~D12为寄存器地址,分别指定该命令所要操作的寄存器地址,D1~D8为寄存器数据内容,D0为该命令行校验信息;如果不是写数据或读数据命令,则D0~D12的数据内容无意义。
为使MCP2030正常工作,系统上电复位时要对该器件进行正确的初始化配置。在此设定无线信号数字滤波序列为2 ms有2 ms无,使能通道自动选择功能和解调信号输出功能,初始化程序段如下:
void Init_MCP2030(void) {
ShiftOutSpi(0xe1,0x41);//reg0 111 0000 1010 0000 1
ShiftOutSpi(0xe2,0x01);//reg1 111 0001 0000 0000 1
ShiftOutSpi(0xe4,0x01);//reg2 111 0010 0000 0000 1
ShiftOutSpi(0xe6,0x01);//reg3 111 0011 0000 0000 1
ShiftOutSpi(0xe8,0x01);//reg4 111 0100 0000 0000 1
ShiftOutSpi(0xeb,0x81);//reg5 111 0101 1100 0000 1
ShiftOutSpi(0xed,0x3f);//reg6 111 0110 1001 1111 1
}
控制器向MCP2030发送数据的程序实现如下:
//数据预先存储在OutData1和OutData2中
void ShiftOutSpi(unsigned char OutData1,unsigned char OutData2) {
unsigned char i;
SCCLK=0;
MCCS=0;
for(i=0;i<8;i++) {
LFDATA=OutData1 & 0x80;
OutData1=OutData11;
SCCLK=1;
SCCLK=0;
}
for(i=0;i<8;i++) {
LFDATA=OutData2 & 0x80;
OutData2=OutData21;
SCCLK=1;
SCCLK=0;
}
MCCS=1;
}
控制器从MCP2030接收数据的程序段如下:
//数据存储在AFESpiInDataH和AFESpiInDataL中
void ShiftInSpi(void) {
unsigned char i;
SCCLK=0;
MCCS=0;
for(i=0;i<8;i++) {
SCCLK=1;
AFESpiInDataH=AFESpiInDataH & LFDATA;
AFESpiInDataH=AFESpiInDataH1;
SCCLK=0;
}
for(i=0;i<8;i++) {
SCCLK=1;
AFESpiInDataL=AFESpiInDataL & LFDATA;
AFESpiInDataL=AFESpiInDataL1;
SCCLK=0;
}
MCCS=1;
}
结语
本文针对MCP2030的特点具体介绍了其在有源射频标签中的应用。该器件不仅集成有3通道低频接收电路以及3方向的磁场检测接收电路,而且功耗低,具备多种节能工作模式,非常适合于其他要求低功耗无线激活的嵌入式系统应用。