主题中讨论的其他器件:MSP430G2553、、、 MSP430F2370
工具与软件:
您好!
我正在将 sloc297c 用于 MSP430G2553和 TRF7970a、并且我能够发送命令以写入/读取数据 ISO15693 RFID、但我找不到 lock a block RFID 函数 sloc297c。 我修改了写入单一块函数、以包括锁定块命令0x22、但它不起作用、并且我总是得到 NO_RESPONSE_RECEIVED。
任何帮助都是非常感谢。
谢谢你
Le
uint8_t ISO15693_sendWriteSingleBlock (uint8_t ui8ReqFlag、uint8_t ui8BlockNumber、uint8_t ui8BlockSize、uint8_t * pui8BlockData)
{
uint8_t ui8Offset = 0;
uint8_t ui8Status = STATUS_FAIL;
uint8_t i、rxLength = 11;
uint8_t lock = false;
uint8_t buffer[32];
if ((ui8ReqFlag & 0x04)=0){//写入单个块命令代码
rxLength += ui8BlockSize;//为写入命令的数据长度添加4个字节
}
ui8ReqFlag = ui8ReqFlag | 0x20;//强制使用寻址的写入-强烈建议的做法
Buffer[ui8Offset++]= 0x8F;//复位 FIFO
Buffer[ui8Offset++]= 0x91;//随 CRC 发送
Buffer[ui8Offset++]= 0x3D;//连续写入
Buffer[ui8Offset++]=((rxLength & 0xF0)>> 0x04);//以字节为单位的数据包长度-发送字节长度的中高半字节
Buffer[ui8Offset++]=(rxLength << 0x04);//以字节为单位的数据包长度-发送字节长度的低半字节和不完整的半字节
Buffer[ui8Offset++]= ui8ReqFlag;// ISO15693标志
如果(ui8ReqFlag 和0x04){
Buffer[ui8Offset++]= 0x22;//写入锁定单块命令代码
}
否则{
Buffer[ui8Offset++]= 0x21;//写入单个块命令代码
}
对于(I = 0;I < ISO15693_ID_LENGTH;I++){
Buffer[ui8Offset++]= tagID[i];
}
Buffer[ui8Offset++]= ui8BlockNumber;//块编号(变量、对于 HF-I Plus 器件、可以转到0x3F;Pro 和 Standard、使用"错误"响应标志进行处理)
如果((ui8ReqFlag 和0x04)=0){
对于(i = 0;i < ui8BlockSize;i++){
Buffer[ui8Offset++]= pui8BlockData[i];//要写入标签的数据
}
}
Buffer[ui8Offset++]= 0;
Buffer[ui8Offset++]= 0;
TRF79xxA_resetIrqStatus ();
TRF79xxA_writeRaw (&Buffer[0]、rxLength + 5);//发出 Get System Information 命令
g_sTrfStatus = TRF79xxA_getTrfStatus ();
//进行特殊处理以涵盖 TI Tag-It HF-I ISO15693应答器的选项标志使用案例
if (g_sTrfStatus == trf_idle || g_sTrfStatus == TX_WAIT){
if (ui8ReqFlag & 0x40){//检查是否设置了选项标志
TRF79xxA_waitTxIRQ (20);// 10毫秒 TX 超时
g_sTrfStatus = TRF79xxA_getTrfStatus ();
if (g_sTrfStatus == TX_COMPLETE){// if transmit complete
MCU_delayMillisecond (20);// 10
TRF79xxA_sendDirectCommand (TRF79XXA_TRANSMIT_NEXT_SLOT_CMD);//发送帧结束标记
TRF79xxA_waitRxIRQ (30);// 30毫秒 RX 超时
}
else{//否则返回错误
Return ui8Status = STATUS_FAIL;
}
}
否则{
TRF79xxA_waitTxIRQ (10);// 10毫秒 TX 超时
TRF79xxA_waitRxIRQ (30);// 30毫秒 RX 超时
}
}
否则、如果(g_sTrfStatus == TX_COMPLETE){
if (ui8ReqFlag & 0x40){//检查是否设置了选项标志
mcu_delayMillisecond (10);
TRF79xxA_sendDirectCommand (TRF79XXA_TRANSMIT_NEXT_SLOT_CMD);//发送帧结束标记
}
TRF79xxA_waitRxIRQ (30);// 30毫秒 RX 超时
}
否则{
Return ui8Status = STATUS_FAIL;
}
g_sTrfStatus = TRF79xxA_getTrfStatus ();
if (g_sTrfStatus == RX_COMPLETE){// if data has been received.
if (ShareBuffer.array.buffer[0]== 0x00){//确认响应标志字节中的"无错误"
ui8Status = STATUS_SUCCESS;//已收到响应
}
else{//响应字节中返回了错误
ui8Status = STATUS_FAIL;
}
}
else{//无响应
ui8Status = STATUS_FAIL;
}
返回 ui8Status;
}