📄 mstick.txt
字号:
000b10 206b636f DCB "ock "
000b14 6f662023 DCB "# fo"
000b18 65722072 DCB "r re"
000b1c 62206461 DCB "ad b"
000b20 6b636f6c DCB "lock"
000b24 00203a20 DCB " : \0"
|L1.2856|
000b28 505f734d DCB "Ms_P"
000b2c 5f656761 DCB "age_"
000b30 64616552 DCB "Read"
000b34 2c642528 DCB "(%d,"
000b38 0a296425 DCB "%d)\n"
000b3c 00000000 DCB "\0\0\0\0"
|L1.2880|
000b40 63656843 DCB "Chec"
000b44 6d75736b DCB "ksum"
000b48 52524520 DCB " ERR"
000b4c 4928524f DCB "OR(I"
000b50 78253a4e DCB "N:%x"
000b54 6c61432c DCB ",Cal"
000b58 78253a63 DCB "c:%x"
000b5c 00000a29 DCB ")\n\0\0"
|L1.2912|
000b60 7478450a DCB "\nExt"
000b64 64206172 DCB "ra d"
000b68 20617461 DCB "ata "
000b6c 00007369 DCB "is\0\0"
|L1.2928|
000b70 7833250a DCB "\n%3x"
000b74 0020203a DCB ": \0"
|L1.2936|
000b78 3230255b DCB "[%02"
000b7c 00005d78 DCB "x]\0\0"
|L1.2944|
000b80 6165520a DCB "\nRea"
000b84 61502064 DCB "d Pa"
000b88 64206567 DCB "ge d"
000b8c 20617461 DCB "ata "
000b90 00007369 DCB "is\0\0"
|L1.2964|
000b94 0000000a DCB "\n\0\0\0"
ENDP
Mstpc_Write_Status_Reg PROC
;;;1039 int Mstpc_Write_Status_Reg(U8 Status_Addr, U8 Status_Size, U8 *Buffer)
;;;1040 {
000b98 e92d41f0 STMFD sp!,{r4-r8,lr}
000b9c e1a08000 MOV r8,r0
000ba0 e1a04001 MOV r4,r1
000ba4 e1a06002 MOV r6,r2
;;;1041 //int i, cnt;
;;;1042 int i;
;;;1043 //U16 IntStatus1, htmp;
;;;1044 U16 htmp;
;;;1045
;;;1046 //Status_Size = (Status_Size+1)*2 / 2;
;;;1047 if(Status_Size%2) Status_Size+=1;
000ba8 e3140001 TST r4,#1
000bac 0a000001 BEQ |L1.3000|
000bb0 e2840001 ADD r0,r4,#1
000bb4 e20040ff AND r4,r0,#0xff
;;;1048
;;;1049 // Set R/W register address
;;;1050 Mstpc_Write_Rw_Reg_Addr(0x0, 0x0, Status_Addr, Status_Size);
|L1.3000|
000bb8 e1a03004 MOV r3,r4
000bbc e1a02008 MOV r2,r8
000bc0 e3a01000 MOV r1,#0
000bc4 e3a00000 MOV r0,#0
000bc8 ebfffffe BL Mstpc_Write_Rw_Reg_Addr
;;;1051
;;;1052 // Status read command.
;;;1053 rTP_CMD = WRITE_REG | (Status_Size);
000bcc e3840cb0 ORR r0,r4,#0xb000
000bd0 e51f1ad0 LDR r1,|L1.264|
000bd4 e5810000 STR r0,[r1,#0]
;;;1054 // Read status data.
;;;1055 for(i=0; i<Status_Size; i+=2) {
000bd8 e3a05000 MOV r5,#0
|L1.3036|
000bdc e1550004 CMP r5,r4
000be0 aa00000e BGE |L1.3104|
000be4 ea000001 B |L1.3056|
|L1.3048|
000be8 e2855002 ADD r5,r5,#2
000bec eafffffa B |L1.3036|
;;;1056 htmp = ((U16)Buffer[i+1])<<8 |(U16)Buffer[i];
|L1.3056|
000bf0 e7d60005 LDRB r0,[r6,r5]
000bf4 e0861005 ADD r1,r6,r5
000bf8 e5d11001 LDRB r1,[r1,#1]
000bfc e1807401 ORR r7,r0,r1,LSL #8
;;;1057 rDAT_FIFO = htmp;
000c00 e51f0b00 LDR r0,|L1.264|
000c04 e5807008 STR r7,[r0,#8]
;;;1058 while(!TBE);
000c08 e1a00000 NOP
|L1.3084|
000c0c e51f0b0c LDR r0,|L1.264|
000c10 e5900004 LDR r0,[r0,#4]
000c14 e3100002 TST r0,#2
000c18 0afffffb BEQ |L1.3084|
;;;1059 }
000c1c eafffff1 B |L1.3048|
;;;1060 while(!INT_P_END);
|L1.3104|
000c20 e1a00000 NOP
|L1.3108|
000c24 e51f0b24 LDR r0,|L1.264|
000c28 e590000c LDR r0,[r0,#0xc]
000c2c e3100080 TST r0,#0x80
000c30 0afffffb BEQ |L1.3108|
;;;1061
;;;1062 }
000c34 e8bd81f0 LDMFD sp!,{r4-r8,pc}
ENDP
Check_Wp PROC
;;;544 int Check_Wp(void)
;;;545 {
000c38 e92d4008 STMFD sp!,{r3,lr}
;;;546 U8 tmps[2];
;;;547
;;;548 Mstpc_Read_Status_Reg(0x2, 0x1, tmps);
000c3c e1a0200d MOV r2,sp
000c40 e3a01001 MOV r1,#1
000c44 e3a00002 MOV r0,#2
000c48 ebfffffe BL Mstpc_Read_Status_Reg
;;;549 if(tmps[0] & STATUS_WP) { // Write protect is enabled.
000c4c e5dd0000 LDRB r0,[sp,#0]
000c50 e3100001 TST r0,#1
000c54 0a000001 BEQ |L1.3168|
;;;550 return 1;
000c58 e3a00001 MOV r0,#1
;;;551 }
;;;552 else return 0; // Not write-protect.
;;;553
;;;554 }
|L1.3164|
000c5c e8bd8008 LDMFD sp!,{r3,pc}
|L1.3168|
000c60 e3a00000 MOV r0,#0 ;552
000c64 eafffffc B |L1.3164| ;552
ENDP
Ms_Page_Write PROC
;;;557 int Ms_Page_Write(U32 Block_Addr, U32 Page_Addr, U8 *Write_Buffer)
;;;558 {
000c68 e92d43fe STMFD sp!,{r1-r9,lr}
000c6c e1a09000 MOV r9,r0
000c70 e1a08001 MOV r8,r1
000c74 e1a06002 MOV r6,r2
;;;559 //int i, cnt=0;
;;;560 int i;
;;;561 //unsigned short IntStatus1, IntStatus2;
;;;562 static int offset=0;
;;;563 U8 Extra_Buffer[EXTRA_SIZE];
;;;564 U16 Chksum, htmp;
;;;565
;;;566 //Uart_Printf("write data.\n");
;;;567
;;;568 // Check if write protect...
;;;569 if(Check_Wp()==1) { // Write protect is enabled.
000c78 ebfffffe BL Check_Wp
000c7c e3500001 CMP r0,#1
000c80 1a000001 BNE |L1.3212|
;;;570 return -1;
000c84 e3e00000 MVN r0,#0
;;;571 }
;;;572
;;;573 // 1. SET R/W address in device TPC
;;;574 Mstpc_Write_Rw_Reg_Addr(0x0, 0x0, 0x10, 0x6);
;;;575
;;;576 // 2. Write_Reg TPC
;;;577 Mstpc_Write_Param_Reg(Block_Addr, PARAM_BAMD, Page_Addr, DE_AREA);
;;;578
;;;579 // make checksum...
;;;580 for(Chksum=0, i=0; i<ONEPAGE_SIZE; i++)
;;;581 {
;;;582 Chksum += Write_Buffer[i];
;;;583
;;;584 }
;;;585 Uart_Printf("Write checksum is [%04x]\n", Chksum);
;;;586
;;;587 // Write checksum.
;;;588 Extra_Buffer[1] = (U8)(Chksum>>8);
;;;589 Extra_Buffer[0] = (U8)Chksum;
;;;590
;;;591 Mstpc_Write_Status_Reg(CHKSUM_REG_START, CHKSUM_SIZE, Extra_Buffer);
;;;592
;;;593
;;;594 // SET_CMD TPC
;;;595 Mstpc_Set_Command(BLOCK_WRITE);
;;;596
;;;597 // Get INT register
;;;598 Int_Status = Mstpc_Get_Int(1, INT_BREQ);
;;;599 //Uart_Printf("Page write cnt(%x).\n", Int_Status);
;;;600
;;;601
;;;602 rTP_CMD = WRITE_PAGE_DATA | ONEPAGE_SIZE;
;;;603 for(i=0; i<ONEPAGE_SIZE; i+=2)
;;;604 {
;;;605 htmp = ((U16)(Write_Buffer[i+1]))<<8 | (U8)Write_Buffer[i];
;;;606 rDAT_FIFO = htmp;
;;;607 while(!TBE);
;;;608 }
;;;609 while(!INT_P_END);
;;;610
;;;611 Int_Status = Mstpc_Get_Int(1, INT_CED);
;;;612 //Uart_Printf("Page write end cnt(%x).\n", Int_Status);
;;;613
;;;614 offset++;
;;;615 }
|L1.3208|
000c88 e8bd83fe LDMFD sp!,{r1-r9,pc}
|L1.3212|
000c8c e3a03006 MOV r3,#6 ;574
000c90 e3a02010 MOV r2,#0x10 ;574
000c94 e3a01000 MOV r1,#0 ;574
000c98 e3a00000 MOV r0,#0 ;574
000c9c ebfffffe BL Mstpc_Write_Rw_Reg_Addr ;574
000ca0 e3a03020 MOV r3,#0x20 ;577
000ca4 e20820ff AND r2,r8,#0xff ;577
000ca8 e3a01080 MOV r1,#0x80 ;577
000cac e1a00009 MOV r0,r9 ;577
000cb0 ebfffffe BL Mstpc_Write_Param_Reg ;577
000cb4 e3a05000 MOV r5,#0 ;580
000cb8 e3a04000 MOV r4,#0 ;580
|L1.3260|
000cbc e3540f80 CMP r4,#0x200 ;580
000cc0 aa000006 BGE |L1.3296| ;580
000cc4 ea000001 B |L1.3280| ;580
|L1.3272|
000cc8 e2844001 ADD r4,r4,#1 ;580
000ccc eafffffa B |L1.3260| ;580
|L1.3280|
000cd0 e7d60004 LDRB r0,[r6,r4] ;582
000cd4 e0800005 ADD r0,r0,r5 ;582
000cd8 e3c05b40 BIC r5,r0,#0x10000 ;582
000cdc eafffff9 B |L1.3272| ;584
|L1.3296|
000ce0 e1a01005 MOV r1,r5 ;585
000ce4 e28f00cc ADR r0,|L1.3512| ;585
000ce8 ebfffffe BL _printf ;585
000cec e1a00425 MOV r0,r5,LSR #8 ;588
000cf0 e5cd0001 STRB r0,[sp,#1] ;588
000cf4 e5cd5000 STRB r5,[sp,#0] ;589
000cf8 e1a0200d MOV r2,sp ;591
000cfc e3a01002 MOV r1,#2 ;591
000d00 e3a0001a MOV r0,#0x1a ;591
000d04 ebfffffe BL Mstpc_Write_Status_Reg ;591
000d08 e3a00055 MOV r0,#0x55 ;595
000d0c ebfffffe BL Mstpc_Set_Command ;595
000d10 e3a01020 MOV r1,#0x20 ;598
000d14 e3a00001 MOV r0,#1 ;598
000d18 ebfffffe BL Mstpc_Get_Int ;598
000d1c e51f1220 LDR r1,|L1.2820| ;598
000d20 e5c10000 STRB r0,[r1,#0] ;598 ; Int_Status
000d24 e3a00cd2 MOV r0,#0xd200 ;602
000d28 e51f1c28 LDR r1,|L1.264| ;602
000d2c e5810000 STR r0,[r1,#0] ;602
000d30 e3a04000 MOV r4,#0 ;603
|L1.3380|
000d34 e3540f80 CMP r4,#0x200 ;603
000d38 aa00000e BGE |L1.3448| ;603
000d3c ea000001 B |L1.3400| ;603
|L1.3392|
000d40 e2844002 ADD r4,r4,#2 ;603
000d44 eafffffa B |L1.3380| ;603
|L1.3400|
000d48 e7d60004 LDRB r0,[r6,r4] ;605
000d4c e0861004 ADD r1,r6,r4 ;605
000d50 e5d11001 LDRB r1,[r1,#1] ;605
000d54 e1807401 ORR r7,r0,r1,LSL #8 ;605
000d58 e51f0c58 LDR r0,|L1.264| ;606
000d5c e5807008 STR r7,[r0,#8] ;606
000d60 e1a00000 NOP ;607
|L1.3428|
000d64 e51f0c64 LDR r0,|L1.264| ;607
000d68 e5900004 LDR r0,[r0,#4] ;607
000d6c e3100002 TST r0,#2 ;607
000d70 0afffffb BEQ |L1.3428| ;607
000d74 eafffff1 B |L1.3392| ;608
|L1.3448|
000d78 e1a00000 NOP ;609
|L1.3452|
000d7c e51f0c7c LDR r0,|L1.264| ;609
000d80 e590000c LDR r0,[r0,#0xc] ;609
000d84 e3100080 TST r0,#0x80 ;609
000d88 0afffffb BEQ |L1.3452| ;609
000d8c e3a01080 MOV r1,#0x80 ;611
000d90 e3a00001 MOV r0,#1 ;611
000d94 ebfffffe BL Mstpc_Get_Int ;611
000d98 e51f129c LDR r1,|L1.2820| ;611
000d9c e5c10000 STRB r0,[r1,#0] ;611 ; Int_Status
000da0 e59f002c LDR r0,|L1.3540| ;614
000da4 e5900000 LDR r0,[r0,#0] ;614 ; offset@Ms_Page_Write_0
000da8 e2800001 ADD r0,r0,#1 ;614
000dac e59f1020 LDR r1,|L1.3540| ;614
000db0 e5810000 STR r0,[r1,#0] ;614 ; offset@Ms_Page_Write_0
000db4 eaffffb3 B |L1.3208|
|L1.3512|
000db8 74697257 DCB "Writ"
000dbc 68632065 DCB "e ch"
000dc0 736b6365 DCB "ecks"
000dc4 69206d75 DCB "um i"
000dc8 255b2073 DCB "s [%"
000dcc 5d783430 DCB "04x]"
|L1.3536|
000dd0 0000000a DCB "\n\0\0\0"
|L1.3540|
000dd4 0000000c DCD ||.bss$2|| + 12
ENDP
Test_Ms_Block_Write PROC
;;;166 void Test_Ms_Block_Write
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -