📄 memcard.lst
字号:
367 1 uchar data i,cTemp;
368 1 if(iPassLen!=3)
369 1 {
370 2 return FALSE;
371 2 }
372 1 answer_reset_4442();
373 1 begin_4442();
374 1 byte_write_4442(0x31);
375 1 for(i=0;i<2;i++)
376 1 {
377 2 byte_write_4442(0x00);
378 2 }
379 1 stop_4442();
380 1 cTemp=byte_read_4442_b(); //错误计数器
381 1 for(i=0;i<iPassLen;i++)
382 1 {
383 2 *sPassword++=byte_read_4442_b();
384 2 }
385 1 return TRUE;
386 1 }
387
388 /*
389 功能:更改SLE4442密码
390 参数:
391 iPassLen:密码数量
392 sPassword:密码指针
393 返回:
394 OP_OK
395 */
396 bit change_password_sle4442(uchar* sPassword,uchar iPassLen)
397 {
398 1 uchar data i;
399 1 if(iPassLen!=3)
400 1 {
401 2 return FALSE;
402 2 }
403 1 answer_reset_4442();
404 1 for(i=1;i<iPassLen+1;i++)
405 1 {
406 2 begin_4442();
407 2 byte_write_4442(0x39);
408 2 byte_write_4442(i);
409 2 byte_write_4442(*sPassword++);
410 2 if(process_4442()!=TRUE)
411 2 {
412 3 return FALSE;
413 3 }
414 2 }
415 1 return TRUE;
416 1 }
417
418 /*
419 功能:读SLE4442错误计数器
420 参数:无
421 返回:错误计数器值
422 */
423
424 uchar error_counter_sle4442(void)
425 {
426 1 uchar data cTemp,counter,i;
427 1 counter=0;
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 8
428 1 cTemp=error_counter_4442();
429 1 for(i=0;i<3;i++)
430 1 {
431 2 if((cTemp&0x01)==0x01)
432 2 {
433 3 counter++;
434 3 }
435 2 cTemp>>=1;
436 2 }
437 1 return counter;
438 1 }
439 /*****************************************************************************************/
440 /***********************以下为4428卡的函数************************************************/
441 /*****************************************************************************************/
442 //reset and atr
443 void answer_reset_4428(void)
444 {
445 1 uchar data i;
446 1 SCL = 1;
447 1 delay(DELAY_CLK_4428);
448 1 RST=HIGH;
449 1 delay(DELAY_CLK_4428);
450 1 SCL = 0;
451 1 delay(DELAY_CLK_4428);
452 1 SCL = 1;
453 1 delay(DELAY_CLK_4428);
454 1 RST=LOW;
455 1 delay(DELAY_CLK_4428);
456 1 for(i=0;i<31;i++)
457 1 {
458 2 SCL = 0;
459 2 delay(DELAY_CLK_4428);
460 2 SCL = 1;
461 2 delay(DELAY_CLK_4428);
462 2 }
463 1 }
464
465 //写入一个字节
466 void byte_write_4428(uchar cTemp)
467 {
468 1 uchar data i;
469 1 RST=HIGH;
470 1 for(i=0;i<8;i++)
471 1 {
472 2 SDA=cTemp&0x01;
473 2 SCL = 0;
474 2 delay(DELAY_CLK_4428);
475 2 SCL = 1;
476 2 delay(DELAY_CLK_4428);
477 2 cTemp=cTemp>>1;
478 2 }
479 1 }
480
481 //读取一个字节
482 uchar byte_read_4428(void)
483 {
484 1 uchar data i;
485 1 uchar cTemp;
486 1 RST=LOW;
487 1 SDA=HIGH;
488 1 cTemp=0x00;
489 1 for(i=0;i<8;i++)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 9
490 1 {
491 2 cTemp=cTemp/2;
492 2 SCL = 0;
493 2 delay(DELAY_CLK_4428);
494 2 SCL = 1;
495 2 delay(DELAY_CLK_4428);
496 2 if(SDA==HIGH)
497 2 {
498 3 cTemp=cTemp+0x80;
499 3 }
500 2 }
501 1 return (cTemp);
502 1 }
503
504 //读取一个字节(带保护位)
505 //返回(uchar)iTemp, iTemp高字节为数据,iTemp低字节为保护标志(0x00为保护,0xff为未保护)
506 uint byte_read_wpbit_4428(void)//tufei
507 {
508 1 uchar idata i;
509 1 uint idata iTemp;
510 1 uchar idata cTemp[2];
511 1 RST=LOW;
512 1 SDA=HIGH;
513 1 cTemp[0]=0x00;
514 1 for(i=0;i<8;i++)
515 1 {
516 2 cTemp[0]=cTemp[0]/2;
517 2 SCL = 0;
518 2 delay(DELAY_CLK_4428);
519 2 SCL = 1;
520 2 delay(DELAY_CLK_4428);
521 2 if(SDA==HIGH)
522 2 {
523 3 cTemp[0]=cTemp[0]+0x80;
524 3 }
525 2 }
526 1 SCL = 0;
527 1 delay(DELAY_CLK_4428);
528 1 SCL = 1;
529 1 delay(DELAY_CLK_4428);
530 1 if(SDA==HIGH)
531 1 cTemp[1]=0xff;
532 1 else
533 1 cTemp[1]=0x00;
534 1 memcpy(&iTemp,cTemp,2);
535 1 return (iTemp);
536 1 }
537
538
539 //检查写入是否完毕
540 bit process_4428(void)
541 {
542 1 uchar data i;
543 1 RST=LOW;
544 1 SDA=HIGH;
545 1 for(i=0;i<256;i++)
546 1 {
547 2 SCL = 0;
548 2 delay(DELAY_CLK_4428);
549 2 SCL = 1;
550 2 delay(DELAY_CLK_4428);
551 2 if(SDA==LOW)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 10
552 2 return TRUE;
553 2 }
554 1 return FALSE;
555 1 }
556
557 uchar error_counter_4428(void)
558 {
559 1 uchar data cTemp;
560 1 answer_reset_4428();
561 1 byte_write_4428(0xce);
562 1 byte_write_4428(0xfd);
563 1 byte_write_4428(0xff);
564 1 cTemp=byte_read_4428();
565 1 return cTemp;
566 1 }
567
568 uchar error_counter_sle4428(void)
569 {
570 1 uchar data cTemp,counter;
571 1 uchar data i;
572 1 counter=0;
573 1 cTemp=error_counter_4428();
574 1 for(i=0;i<8;i++)
575 1 {
576 2 if((cTemp&0x80)==0x80)
577 2 counter++;
578 2 cTemp<<=1;
579 2 }
580 1 return counter;
581 1 }
582
583 ///////////////////////////////////////////////////////////////////////////////////////
584 /*
585 功能:从SLE4428中读取数据
586 参数:
587 iOffset:读取数据起始地址
588 iReadLen:读取数据长度
589 sBuffer:读取数据指针
590 返回:
591 TRUE
592 */
593 bit read_sle4428(uint iOffset,uchar iReadLen,uchar* sBuffer)
594 {
595 1 uchar data i;
596 1 uchar cTemp[2];
597 1 if((iOffset<0)||(iOffset>1023))
598 1 return FALSE;
599 1 if((1024-iOffset)<iReadLen)
600 1 return FALSE;
601 1 answer_reset_4428();
602 1 memcpy(cTemp,&iOffset,2);
603 1 cTemp[0]=(cTemp[0]*64)|0x0e;
604 1 byte_write_4428(cTemp[0]);
605 1 byte_write_4428(cTemp[1]);
606 1 byte_write_4428(0xff);
607 1 for(i=0;i<iReadLen;i++)
608 1 *sBuffer++=byte_read_4428();
609 1 return TRUE;
610 1 }
611
612 /*
613 功能:向SLE4428中写入数据
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 11
614 参数:
615 iOffset:写入数据起始地址
616 iWriteLen:写入数据长度
617 sBuffer:写入数据指针
618 返回:
619 TRUE
620 */
621 bit write_sle4428(uint iOffset,uchar iWriteLen,uchar* sBuffer)
622 {
623 1 uchar data i;
624 1 uint data ipOffset;
625 1 uchar cTemp[2];
626 1 uchar* swBuffer;
627 1 if((iOffset<0)||(iOffset>1023))
628 1 return FALSE;
629 1 if((1024-iOffset)<iWriteLen)
630 1 return FALSE;
631 1 swBuffer=sBuffer;
632 1 ipOffset=iOffset;
633 1 answer_reset_4428();
634 1 for(i=0;i<iWriteLen;i++)
635 1 {
636 2 memcpy(cTemp,&ipOffset,2);
637 2 cTemp[0]=(cTemp[0]*64)|0x33;
638 2 byte_write_4428(cTemp[0]);
639 2 byte_write_4428(cTemp[1]);
640 2 byte_write_4428(*swBuffer);
641 2 swBuffer++;
642 2 if(process_4428()!=TRUE)
643 2 return FALSE;
644 2 ipOffset++;
645 2 }
646 1 answer_reset_4428();
647 1 memcpy(cTemp,&iOffset,2);
648 1 cTemp[0]=(cTemp[0]*64)|0x0e;
649 1 byte_write_4428(cTemp[0]);
650 1 byte_write_4428(cTemp[1]);
651 1 byte_write_4428(0xff);
652 1 for(i=0;i<iWriteLen;i++)
653 1 if(byte_read_4428()!=*sBuffer++)
654 1 return FALSE;
655 1 return TRUE;
656 1 }
657
658 /*
659 功能:从SLE4428中读取数据(带保护位)
660 参数:
661 iOffset:读取数据起始地址
662 iReadLen:读取数据长度
663 sBuffer:读取数据指针(偶数位为数据,奇数位为保护位,0x00为保护,0xff为未保护)
664 返回:
665 TRUE
666 */
667 bit read_wpbit_sle4428(uint iOffset,uchar iReadLen,uchar* sBuffer)
668 {
669 1 uchar data i;
670 1 uint data iTemp;
671 1 uchar cTemp[2];
672 1 if((iOffset<0)||(iOffset>1023))
673 1 return FALSE;
674 1 if((1024-iOffset)<iReadLen)
675 1 return FALSE;
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 12
676 1 answer_reset_4428();
677 1 memcpy(cTemp,&iOffset,2);
678 1 cTemp[0]=(cTemp[0]*64)|0x0c;
679 1 byte_write_4428(cTemp[0]);
680 1 byte_write_4428(cTemp[1]);
681 1 byte_write_4428(0xff);
682 1 for(i=0;i<iReadLen;i++)
683 1 {
684 2 iTemp=byte_read_wpbit_4428();
685 2 memcpy(sBuffer,&iTemp,2);
686 2 sBuffer+=2;
687 2 }
688 1 return TRUE;
689 1 }
690
691 /*
692 功能:向SLE4428中写入数据(带保护位)
693 参数:
694 iOffset:写入数据起始地址
695 iWriteLen:写入数据长度
696 sBuffer:写入数据指针
697 返回:
698 TRUE
699 */
700 bit write_wpbit_sle4428(uint iOffset,uchar iWriteLen,uchar* sBuffer)
701 {
702 1 uchar data i;
703 1 uint ipOffset,iTemp;
704 1 uchar cTemp[2];
705 1 uchar* swBuffer;
706 1 if((iOffset<0)||(iOffset>1020))
707 1 return FALSE;
708 1 if((1021-iOffset)<iWriteLen)
709 1 return FALSE;
710 1 ipOffset=iOffset;
711 1 swBuffer=sBuffer;
712 1 answer_reset_4428();
713 1 for(i=0;i<iWriteLen;i++)
714 1 {
715 2 memcpy(cTemp,&ipOffset,2);
716 2 cTemp[0]=(cTemp[0]*64)|0x31;
717 2 byte_write_4428(cTemp[0]);
718 2 byte_write_4428(cTemp[1]);
719 2 byte_write_4428(*swBuffer++);
720 2 if(process_4428()!=TRUE)
721 2 return FALSE;
722 2 ipOffset++;
723 2 }
724 1 answer_reset_4428();
725 1 memcpy(cTemp,&iOffset,2);
726 1 cTemp[0]=(cTemp[0]*64)|0x0c;
727 1 byte_write_4428(cTemp[0]);
728 1 byte_write_4428(cTemp[1]);
729 1 byte_write_4428(0xff);
730 1 for(i=0;i<iWriteLen;i++)
731 1 {
732 2 iTemp=byte_read_wpbit_4428();
733 2 memcpy(cTemp,&iTemp,2);
734 2 if(cTemp[1]!=0x00)
735 2 return FALSE;
736 2 if(cTemp[0]!=*sBuffer++)
737 2 return FALSE;
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 13
738 2 }
739 1 return TRUE;
740 1 }
741
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -