📄 mfucfunc.lst
字号:
228 MRcvBuffer[7] = 0x13; // RegModWidth
229 MRcvBuffer[8] = 0x00; // RFU16
230 MRcvBuffer[9] = 0x00; // RFU17
231
232 MRcvBuffer[10] = 0x00; // Page
233 MRcvBuffer[11] = 0x73; // RegRxControl1
234 MRcvBuffer[12] = 0x08; // RegDecoderControl
235 MRcvBuffer[13] = 0x6c; // RegBitPhase
236 MRcvBuffer[14] = 0xFF; // RegRxThreshold
237 MRcvBuffer[15] = 0x00; // RFU1D
238 MRcvBuffer[16] = 0x00; // RegRxControl2
239 MRcvBuffer[17] = 0x00; // RegClockQControl
240
241 MRcvBuffer[18] = 0x00; // Page
242 MRcvBuffer[19] = 0x06; // RegRxWait
243 MRcvBuffer[20] = 0x03; // RegChannelRedundancy
244 MRcvBuffer[21] = 0x63; // RegCRCPresetLSB
245 MRcvBuffer[22] = 0x63; // RegCRCPresetMSB
246 MRcvBuffer[23] = 0x0; // RFU25
247 MRcvBuffer[24] = 0x04; // RegMfOutSelect enable mfout = manchester HT
248 MRcvBuffer[25] = 0x00; // RFU27
249
250 // PAGE 5 FIFO, Timer and IRQ-Pin Configuration
251 MRcvBuffer[26] = 0x00; // Page
252 MRcvBuffer[27] = 0x08; // RegFIFOLevel
253 MRcvBuffer[28] = 0x07; // RegTimerClock
254 MRcvBuffer[29] = 0x06; // RegTimerControl
255 MRcvBuffer[30] = 0x0A; // RegTimerReload
256 MRcvBuffer[31] = 0x02; // RegIRqPinConfig
257 MRcvBuffer[32] = 0x00; // RFU
C51 COMPILER V4.01, MFUCFUNC 19/08/04 14:33:23 PAGE 5
258 MRcvBuffer[33] = 0x00; // RFU
259 MInfo.nBytesToSend = 34;
260
261 status = PcdSingleResponseCmd(PCD_WRITEE2,
262 MRcvBuffer,
263 MRcvBuffer,
264 &MInfo); // write e2
265 return status;
266 }
267 */
268 ///////////////////////////////////////////////////////////////////////
269 // M I F A R E R E M O T E A N T E N N A
270 // Configuration of master module
271 ///////////////////////////////////////////////////////////////////////
272 /*char Mf500ActiveAntennaMasterConfig(void)
273 {
274 char status = MI_OK;
275
276 WriteRC(RegRxControl2,0x42);
277 WriteRC(RegTxControl,0x10);
278 WriteRC(RegBitPhase,0x11);
279 //WriteRC(RegControl,0x00);//////by allen
280 return status;
281 }
282 */
283 ///////////////////////////////////////////////////////////////////////
284 // M I F A R E R E Q U E S T
285 ///////////////////////////////////////////////////////////////////////
286 char Mf500PiccRequest(unsigned char req_code, // request code ALL = 0x52
287 // or IDLE = 0x26
288 unsigned char *atq) // answer to request
289 {
290 1 return Mf500PiccCommonRequest(req_code,atq);
291 1 }
292
293 ///////////////////////////////////////////////////////////////////////
294 // M I F A R E C O M M O N R E Q U E S T
295 ///////////////////////////////////////////////////////////////////////
296 char Mf500PiccCommonRequest(unsigned char req_code,
297 unsigned char *atq)
298 {
299 1 char status = MI_OK;
300 1 //unsigned char nByte;
301 1 //unsigned char Temp;
302 1 //unsigned char Temp1;
303 1 //************* initialize ******************************
304 1 if ((status = Mf500PcdSetDefaultAttrib()) == MI_OK)
305 1 {
306 2
307 2 PcdSetTmo(106);//allen 10.23//106
308 2
309 2 WriteRC(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
310 2 ClearBitMask(RegControl,0x08); // disable crypto 1 unit
311 2 WriteRC(RegBitFraming,0x07); // set TxLastBits to 7////0x07
312 2
313 2 ResetInfo(MInfo);
314 2 MRcvBuffer[0] = req_code;
315 2 MInfo.nBytesToSend = 1;
316 2 status = PcdSingleResponseCmd(PCD_TRANSCEIVE,
317 2 MRcvBuffer,
318 2 MRcvBuffer,
319 2 &MInfo);
320 2
321 2 if (status) // error occured
322 2 {
323 3 //nByte=ReadRC(RegFIFOLength);
C51 COMPILER V4.01, MFUCFUNC 19/08/04 14:33:23 PAGE 6
324 3 //Temp=ReadRC(RegFIFOData);
325 3 *atq = 0;
326 3
327 3 }
328 2 else
329 2 {
330 3 if (MInfo.nBitsReceived != 16) // 2 bytes expected
331 3 {
332 4 *atq = 0;
333 4
334 4 //nByte=ReadRC(RegFIFOLength);
335 4 //Temp=ReadRC(RegFIFOData);
336 4 //Temp1=ReadRC(RegFIFOData);
337 4 status = MI_BITCOUNTERR;
338 4 }
339 3 else
340 3 {
341 4 status = MI_OK;
342 4 memcpy(atq,MRcvBuffer,2);
343 4 }
344 3 }
345 2 }
346 1 return status;
347 1 }
348
349 ///////////////////////////////////////////////////////////////////////
350 // M I F A R E A N T I C O L L I S I O N
351 // for standard select
352 ///////////////////////////////////////////////////////////////////////
353 char Mf500PiccAnticoll (unsigned char bcnt,
354 unsigned char *snr)
355 {
356 1 return Mf500PiccCascAnticoll(0x93,bcnt,snr); // first cascade level
357 1 }
358
359 ///////////////////////////////////////////////////////////////////////
360 // M I F A R E A N T I C O L L I S I O N
361 // for extended serial numbers
362 ///////////////////////////////////////////////////////////////////////
363 char Mf500PiccCascAnticoll (unsigned char select_code,
364 unsigned char bcnt,
365 unsigned char *snr)
366 {
367 1 char status = MI_OK;
368 1 char snr_in[4]; // copy of the input parameter snr
369 1 char nbytes = 0; // how many bytes received
370 1 char nbits = 0; // how many bits received
371 1 char complete = 0; // complete snr recived
372 1 char i = 0;
373 1 char byteOffset = 0;
374 1 unsigned char snr_crc; // check byte calculation
375 1 unsigned char snr_check;
376 1 unsigned char dummyShift1; // dummy byte for snr shift
377 1 unsigned char dummyShift2; // dummy byte for snr shift
378 1
379 1 //************* Initialisierung ******************************
380 1 if ((status = Mf500PcdSetDefaultAttrib()) == MI_OK)
381 1 {
382 2 PcdSetTmo(106);
383 2
384 2 memcpy(snr_in,snr,4);
385 2
386 2 WriteRC(RegDecoderControl,0x28); // ZeroAfterColl aktivieren
387 2 ClearBitMask(RegControl,0x08); // disable crypto 1 unit
388 2
389 2 //************** Anticollision Loop ***************************
C51 COMPILER V4.01, MFUCFUNC 19/08/04 14:33:23 PAGE 7
390 2 complete=0;
391 2 while (!complete && (status == MI_OK) )
392 2 {
393 3 ResetInfo(MInfo);
394 3 WriteRC(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
395 3 nbits = bcnt % 8; // remaining number of bits
396 3 if (nbits)
397 3 {
398 4 //Temp=nbits<<4|nbits;
399 4 //WriteRC(RegBitFraming,Temp);
400 4 WriteRC(RegBitFraming,nbits << 4 | nbits); // TxLastBits/RxAlign auf nb_bi
401 4 nbytes = bcnt / 8 + 1;
402 4 // number of bytes known
403 4
404 4 // in order to solve an inconsistancy in the anticollision sequence
405 4 // (will be solved soon), the case of 7 bits has to be treated in a
406 4 // separate way
407 4 if (nbits == 7 )
408 4 {
409 5 MInfo.cmd = PICC_ANTICOLL1; // pass command flag to ISR
410 5 WriteRC(RegBitFraming,nbits); // reset RxAlign to zero
411 5 }
412 4 }
413 3 else
414 3 {
415 4 nbytes = bcnt / 8;
416 4 }
417 3
418 3 MRcvBuffer[0] = select_code;
419 3 MRcvBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits; //number of bytes send
420 3
421 3 for (i = 0; i < nbytes; i++) // Sende Buffer beschreiben
422 3 {
423 4 MRcvBuffer[i + 2] = snr_in[i];
424 4 }
425 3 MInfo.nBytesToSend = 2 + nbytes;
426 3
427 3 status = PcdSingleResponseCmd(PCD_TRANSCEIVE,
428 3 MRcvBuffer,
429 3 MRcvBuffer,
430 3 &MInfo);
431 3
432 3 // in order to solve an inconsistancy in the anticollision sequence
433 3 // (will be solved soon), the case of 7 bits has to be treated in a
434 3 // separate way
435 3 if (nbits == 7)
436 3 {
437 4 // reorder received bits
438 4 dummyShift1 = 0x00;
439 4 for (i = 0; i < MInfo.nBytesReceived; i++)
440 4 {
441 5 dummyShift2 = MRcvBuffer[i];
442 5 MRcvBuffer[i] = (dummyShift1 >> (i+1)) | (MRcvBuffer[i] << (7-i));
443 5 dummyShift1 = dummyShift2;
444 5 }
445 4 MInfo.nBitsReceived -= MInfo.nBytesReceived; // subtract received parity bits
446 4 // recalculation of collision position
447 4 if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
448 4 }
449 3
450 3 if ( status == MI_OK || status == MI_COLLERR) // no other occured
451 3 {
452 4 // R e s p o n s e P r o c e s s i n g
453 4 if ( MInfo.nBitsReceived != (40 - bcnt) ) // not 5 bytes answered
454 4 {
455 5 status = MI_BITCOUNTERR;
C51 COMPILER V4.01, MFUCFUNC 19/08/04 14:33:23 PAGE 8
456 5 }
457 4 else
458 4 {
459 5 byteOffset = 0;
460 5 if ( nbits != 0 ) // last byte was not complete
461 5 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -