mirror of https://github.com/FOME-Tech/openblt.git
Refs #285. Removed FatFS from STM32F103 Nucleo demo bootloader.
git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@210 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
parent
f3c3dcbdc9
commit
4cdb84a622
Binary file not shown.
|
@ -7,38 +7,38 @@ start address 0x08000000
|
||||||
|
|
||||||
Program Header:
|
Program Header:
|
||||||
LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15
|
LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15
|
||||||
filesz 0x00001158 memsz 0x00001158 flags r-x
|
filesz 0x00001164 memsz 0x00001164 flags r-x
|
||||||
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08001158 align 2**15
|
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08001164 align 2**15
|
||||||
filesz 0x00000001 memsz 0x000006f4 flags rw-
|
filesz 0x00000001 memsz 0x000006f0 flags rw-
|
||||||
private flags = 5000202: [Version5 EABI] [soft-float ABI] [has entry point]
|
private flags = 5000202: [Version5 EABI] [soft-float ABI] [has entry point]
|
||||||
|
|
||||||
Sections:
|
Sections:
|
||||||
Idx Name Size VMA LMA File off Algn
|
Idx Name Size VMA LMA File off Algn
|
||||||
0 .text 00001158 08000000 08000000 00008000 2**2
|
0 .text 00001164 08000000 08000000 00008000 2**2
|
||||||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||||
1 .data 00000001 20000000 08001158 00010000 2**0
|
1 .data 00000001 20000000 08001164 00010000 2**0
|
||||||
CONTENTS, ALLOC, LOAD, DATA
|
CONTENTS, ALLOC, LOAD, DATA
|
||||||
2 .bss 000006f0 20000004 0800115c 00010001 2**2
|
2 .bss 000006ec 20000004 08001168 00010001 2**2
|
||||||
ALLOC
|
ALLOC
|
||||||
3 .debug_info 000025d6 00000000 00000000 00010001 2**0
|
3 .debug_info 0000261e 00000000 00000000 00010001 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
4 .debug_abbrev 00000fe9 00000000 00000000 000125d7 2**0
|
4 .debug_abbrev 00000fe9 00000000 00000000 0001261f 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
5 .debug_aranges 00000318 00000000 00000000 000135c0 2**0
|
5 .debug_aranges 00000328 00000000 00000000 00013608 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
6 .debug_ranges 00000240 00000000 00000000 000138d8 2**0
|
6 .debug_ranges 00000250 00000000 00000000 00013930 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
7 .debug_line 00000d8d 00000000 00000000 00013b18 2**0
|
7 .debug_line 00000dba 00000000 00000000 00013b80 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
8 .debug_str 00000b8e 00000000 00000000 000148a5 2**0
|
8 .debug_str 00000b97 00000000 00000000 0001493a 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
9 .comment 00000030 00000000 00000000 00015433 2**0
|
9 .comment 00000030 00000000 00000000 000154d1 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
10 .ARM.attributes 00000033 00000000 00000000 00015463 2**0
|
10 .ARM.attributes 00000033 00000000 00000000 00015501 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
11 .debug_frame 00000648 00000000 00000000 00015498 2**2
|
11 .debug_frame 00000674 00000000 00000000 00015534 2**2
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
12 .debug_loc 00000f9b 00000000 00000000 00015ae0 2**0
|
12 .debug_loc 00000f9b 00000000 00000000 00015ba8 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
08000000 l d .text 00000000 .text
|
08000000 l d .text 00000000 .text
|
||||||
|
@ -58,11 +58,11 @@ SYMBOL TABLE:
|
||||||
00000000 l df *ABS* 00000000 main.c
|
00000000 l df *ABS* 00000000 main.c
|
||||||
00000000 l df *ABS* 00000000 boot.c
|
00000000 l df *ABS* 00000000 boot.c
|
||||||
00000000 l df *ABS* 00000000 com.c
|
00000000 l df *ABS* 00000000 com.c
|
||||||
20000004 l O .bss 00000040 xcpCtoReqPacket.4160
|
20000004 l O .bss 00000040 xcpCtoReqPacket.4162
|
||||||
20000000 l O .data 00000001 comActiveInterface
|
20000000 l O .data 00000001 comActiveInterface
|
||||||
00000000 l df *ABS* 00000000 xcp.c
|
00000000 l df *ABS* 00000000 xcp.c
|
||||||
080003a0 l F .text 00000016 XcpSetCtoError
|
080003a0 l F .text 00000016 XcpSetCtoError
|
||||||
0800105c l O .text 00000008 xcpStationId
|
08001068 l O .text 00000008 xcpStationId
|
||||||
20000044 l O .bss 0000004c xcpInfo
|
20000044 l O .bss 0000004c xcpInfo
|
||||||
00000000 l df *ABS* 00000000 backdoor.c
|
00000000 l df *ABS* 00000000 backdoor.c
|
||||||
20000090 l O .bss 00000001 backdoorOpen
|
20000090 l O .bss 00000001 backdoorOpen
|
||||||
|
@ -71,81 +71,81 @@ SYMBOL TABLE:
|
||||||
00000000 l df *ABS* 00000000 assert.c
|
00000000 l df *ABS* 00000000 assert.c
|
||||||
00000000 l df *ABS* 00000000 cpu.c
|
00000000 l df *ABS* 00000000 cpu.c
|
||||||
00000000 l df *ABS* 00000000 uart.c
|
00000000 l df *ABS* 00000000 uart.c
|
||||||
08000840 l F .text 0000004e UartTransmitByte
|
08000844 l F .text 0000004e UartTransmitByte
|
||||||
20000098 l O .bss 00000004 xcpCtoRxStartTime.4186
|
20000098 l O .bss 00000004 xcpCtoRxStartTime.4188
|
||||||
2000009c l O .bss 00000001 xcpCtoRxLength.4184
|
2000009c l O .bss 00000041 xcpCtoReqPacket.4185
|
||||||
200000a0 l O .bss 00000041 xcpCtoReqPacket.4183
|
200000e0 l O .bss 00000001 xcpCtoRxLength.4186
|
||||||
200000e4 l O .bss 00000001 xcpCtoRxInProgress.4185
|
200000e1 l O .bss 00000001 xcpCtoRxInProgress.4187
|
||||||
00000000 l df *ABS* 00000000 nvm.c
|
00000000 l df *ABS* 00000000 nvm.c
|
||||||
00000000 l df *ABS* 00000000 timer.c
|
00000000 l df *ABS* 00000000 timer.c
|
||||||
200000e8 l O .bss 00000004 millisecond_counter
|
200000e4 l O .bss 00000004 millisecond_counter
|
||||||
00000000 l df *ABS* 00000000 flash.c
|
00000000 l df *ABS* 00000000 flash.c
|
||||||
08000ac8 l F .text 00000012 FlashLock
|
08000acc l F .text 00000012 FlashLock
|
||||||
08000adc l F .text 00000044 FlashGetSector
|
08000ae0 l F .text 00000044 FlashGetSector
|
||||||
08000b20 l F .text 000000d0 FlashWriteBlock
|
08000b24 l F .text 000000d0 FlashWriteBlock
|
||||||
08000bf0 l F .text 00000062 FlashSwitchBlock
|
08000bf4 l F .text 00000062 FlashSwitchBlock
|
||||||
08000c54 l F .text 00000084 FlashAddToBlock
|
08000c58 l F .text 00000084 FlashAddToBlock
|
||||||
0800108c l O .text 0000009c flashLayout
|
08001098 l O .text 0000009c flashLayout
|
||||||
200000ec l O .bss 00000204 bootBlockInfo
|
200000e8 l O .bss 00000204 bootBlockInfo
|
||||||
200002f0 l O .bss 00000204 blockInfo
|
200002ec l O .bss 00000204 blockInfo
|
||||||
00000000 l df *ABS* 00000000 cpu_comp.c
|
00000000 l df *ABS* 00000000 cpu_comp.c
|
||||||
00000000 l df *ABS* 00000000 cstart.c
|
00000000 l df *ABS* 00000000 cstart.c
|
||||||
08001038 l F .text 00000000 zero_loop
|
08001040 l F .text 00000000 zero_loop
|
||||||
00000000 l df *ABS* 00000000
|
00000000 l df *ABS* 00000000
|
||||||
00000200 l *ABS* 00000000 __STACKSIZE__
|
00000200 l *ABS* 00000000 __STACKSIZE__
|
||||||
080002ec g F .text 00000018 ComInit
|
080002ec g F .text 00000018 ComInit
|
||||||
08000cf4 g F .text 00000050 FlashWrite
|
08000cf8 g F .text 00000050 FlashWrite
|
||||||
080007dc g F .text 00000008 AssertFailure
|
080007e0 g F .text 00000008 AssertFailure
|
||||||
08000ff8 g F .text 00000054 reset_handler
|
08000ffc g F .text 00000058 reset_handler
|
||||||
08000a90 g F .text 00000022 TimerUpdate
|
08000a94 g F .text 00000022 TimerUpdate
|
||||||
080003e8 g F .text 00000010 XcpPacketTransmitted
|
080003e8 g F .text 00000010 XcpPacketTransmitted
|
||||||
08000304 g F .text 0000002c ComTask
|
08000304 g F .text 0000002c ComTask
|
||||||
080002bc g F .text 0000001c BootInit
|
080002bc g F .text 0000001c BootInit
|
||||||
080007b0 g F .text 00000022 BackDoorInit
|
080007b4 g F .text 00000022 BackDoorInit
|
||||||
080007d8 g F .text 00000002 CopService
|
080007dc g F .text 00000002 CopService
|
||||||
08001158 g .text 00000000 _etext
|
08001164 g .text 00000000 _etext
|
||||||
08000ff0 g F .text 00000004 CpuIrqDisable
|
08000ff4 g F .text 00000004 CpuIrqDisable
|
||||||
08000fd0 g F .text 0000000a FlashGetUserProgBaseAddress
|
08000fd4 g F .text 0000000a FlashGetUserProgBaseAddress
|
||||||
08000a80 g F .text 0000000e TimerReset
|
08000a84 g F .text 0000000e TimerReset
|
||||||
080002d8 g F .text 00000014 BootTask
|
080002d8 g F .text 00000014 BootTask
|
||||||
08000ec4 g F .text 00000058 FlashWriteChecksum
|
08000ec8 g F .text 00000058 FlashWriteChecksum
|
||||||
08000334 g F .text 0000001a ComTransmitPacket
|
08000334 g F .text 0000001a ComTransmitPacket
|
||||||
080003d4 g F .text 00000012 XcpIsConnected
|
080003d4 g F .text 00000012 XcpIsConnected
|
||||||
08000a1c g F .text 00000008 NvmInit
|
08000a20 g F .text 00000008 NvmInit
|
||||||
08000cd8 g F .text 0000001a FlashInit
|
08000cdc g F .text 0000001a FlashInit
|
||||||
08000a3c g F .text 00000008 NvmGetUserProgBaseAddress
|
08000a40 g F .text 00000008 NvmGetUserProgBaseAddress
|
||||||
200004f4 g .bss 00000000 _ebss
|
200004f0 g .bss 00000000 _ebss
|
||||||
08000fdc g F .text 00000012 UnusedISR
|
08000fe0 g F .text 00000012 UnusedISR
|
||||||
08000330 g F .text 00000002 ComFree
|
08000330 g F .text 00000002 ComFree
|
||||||
08000890 g F .text 0000002a UartInit
|
08000894 g F .text 0000002a UartInit
|
||||||
08000a2c g F .text 00000008 NvmErase
|
08000a30 g F .text 00000008 NvmErase
|
||||||
20000004 g .bss 00000000 _bss
|
20000004 g .bss 00000000 _bss
|
||||||
080003f8 g F .text 00000376 XcpPacketReceived
|
080003f8 g F .text 0000037a XcpPacketReceived
|
||||||
080007e4 g F .text 00000008 CpuInit
|
080007e8 g F .text 00000008 CpuInit
|
||||||
08000f84 g F .text 0000004c FlashDone
|
08000f88 g F .text 0000004c FlashDone
|
||||||
080003b8 g F .text 0000001c XcpInit
|
080003b8 g F .text 0000001c XcpInit
|
||||||
08000d44 g F .text 0000017e FlashErase
|
08000d48 g F .text 0000017e FlashErase
|
||||||
08000150 g F .text 0000016a main
|
08000150 g F .text 0000016a main
|
||||||
08000a44 g F .text 00000012 NvmDone
|
08000a48 g F .text 00000012 NvmDone
|
||||||
080008bc g F .text 00000066 UartTransmitPacket
|
080008c0 g F .text 00000066 UartTransmitPacket
|
||||||
08000a34 g F .text 00000008 NvmVerifyChecksum
|
08000a38 g F .text 00000008 NvmVerifyChecksum
|
||||||
08000820 g F .text 0000001e CpuMemCopy
|
08000824 g F .text 0000001e CpuMemCopy
|
||||||
08000374 g F .text 00000024 ComGetActiveInterfaceMaxTxLen
|
08000374 g F .text 00000024 ComGetActiveInterfaceMaxTxLen
|
||||||
08000924 g F .text 000000f8 UartReceivePacket
|
08000928 g F .text 000000f8 UartReceivePacket
|
||||||
08000ff4 g F .text 00000004 CpuIrqEnable
|
08000ff8 g F .text 00000004 CpuIrqEnable
|
||||||
20000000 g .data 00000000 _data
|
20000000 g .data 00000000 _data
|
||||||
080007d4 g F .text 00000002 CopInit
|
080007d8 g F .text 00000002 CopInit
|
||||||
08000a24 g F .text 00000008 NvmWrite
|
08000a28 g F .text 00000008 NvmWrite
|
||||||
080007ec g F .text 00000034 CpuStartUserProgram
|
080007f0 g F .text 00000034 CpuStartUserProgram
|
||||||
200006f4 g .bss 00000000 _estack
|
200006f0 g .bss 00000000 _estack
|
||||||
08000f1c g F .text 00000068 FlashVerifyChecksum
|
08000f20 g F .text 00000068 FlashVerifyChecksum
|
||||||
20000001 g .data 00000000 _edata
|
20000001 g .data 00000000 _edata
|
||||||
08000000 g O .text 00000150 _vectab
|
08000000 g O .text 00000150 _vectab
|
||||||
08000398 g F .text 00000008 ComIsConnected
|
08000398 g F .text 00000008 ComIsConnected
|
||||||
08000350 g F .text 00000024 ComGetActiveInterfaceMaxRxLen
|
08000350 g F .text 00000024 ComGetActiveInterfaceMaxRxLen
|
||||||
08000770 g F .text 00000040 BackDoorCheck
|
08000774 g F .text 00000040 BackDoorCheck
|
||||||
200004f4 g .bss 00000000 _stack
|
200004f0 g .bss 00000000 _stack
|
||||||
08000ab4 g F .text 00000012 TimerGet
|
08000ab8 g F .text 00000012 TimerGet
|
||||||
08000a58 g F .text 00000028 TimerInit
|
08000a5c g F .text 00000028 TimerInit
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
S02B000062696E2F6F70656E626C745F64656D6F70726F675F6E75636C656F5F73746D33326631303372622EC3
|
S02B000062696E2F6F70656E626C745F64656D6F70726F675F6E75636C656F5F73746D33326631303372622EC3
|
||||||
S31508000000F4060020F90F0008DD0F0008DD0F0008D0
|
S31508000000F0060020FD0F0008E10F0008E10F0008C8
|
||||||
S31508000010DD0F0008DD0F0008DD0F0008DD0F000802
|
S31508000010E10F0008E10F0008E10F0008E10F0008F2
|
||||||
S31508000020DD0F0008DD0F0008DD0F0008DD0F0008F2
|
S31508000020E10F0008E10F0008E10F0008E10F0008E2
|
||||||
S31508000030DD0F0008DD0F0008DD0F0008DD0F0008E2
|
S31508000030E10F0008E10F0008E10F0008E10F0008D2
|
||||||
S31508000040DD0F0008DD0F0008DD0F0008DD0F0008D2
|
S31508000040E10F0008E10F0008E10F0008E10F0008C2
|
||||||
S31508000050DD0F0008DD0F0008DD0F0008DD0F0008C2
|
S31508000050E10F0008E10F0008E10F0008E10F0008B2
|
||||||
S31508000060DD0F0008DD0F0008DD0F0008DD0F0008B2
|
S31508000060E10F0008E10F0008E10F0008E10F0008A2
|
||||||
S31508000070DD0F0008DD0F0008DD0F0008DD0F0008A2
|
S31508000070E10F0008E10F0008E10F0008E10F000892
|
||||||
S31508000080DD0F0008DD0F0008DD0F0008DD0F000892
|
S31508000080E10F0008E10F0008E10F0008E10F000882
|
||||||
S31508000090DD0F0008DD0F0008DD0F0008DD0F000882
|
S31508000090E10F0008E10F0008E10F0008E10F000872
|
||||||
S315080000A0DD0F0008DD0F0008DD0F0008DD0F000872
|
S315080000A0E10F0008E10F0008E10F0008E10F000862
|
||||||
S315080000B0DD0F0008DD0F0008DD0F0008DD0F000862
|
S315080000B0E10F0008E10F0008E10F0008E10F000852
|
||||||
S315080000C0DD0F0008DD0F0008DD0F0008DD0F000852
|
S315080000C0E10F0008E10F0008E10F0008E10F000842
|
||||||
S315080000D0DD0F0008DD0F0008DD0F0008DD0F000842
|
S315080000D0E10F0008E10F0008E10F0008E10F000832
|
||||||
S315080000E0DD0F0008DD0F0008DD0F0008DD0F000832
|
S315080000E0E10F0008E10F0008E10F0008E10F000822
|
||||||
S315080000F0DD0F0008DD0F0008DD0F0008DD0F000822
|
S315080000F0E10F0008E10F0008E10F0008E10F000812
|
||||||
S31508000100DD0F0008DD0F0008DD0F0008DD0F000811
|
S31508000100E10F0008E10F0008E10F0008E10F000801
|
||||||
S31508000110DD0F0008DD0F0008DD0F0008DD0F000801
|
S31508000110E10F0008E10F0008E10F0008E10F0008F1
|
||||||
S31508000120DD0F0008DD0F0008DD0F0008DD0F0008F1
|
S31508000120E10F0008E10F0008E10F0008E10F0008E1
|
||||||
S31508000130DD0F0008DD0F0008DD0F0008DD0F0008E1
|
S31508000130E10F0008E10F0008E10F0008E10F0008D1
|
||||||
S31508000140DD0F0008DD0F0008DD0F0008DD0F0008D1
|
S31508000140E10F0008E10F0008E10F0008E10F0008C1
|
||||||
S3150800015000B583B00023009301934FF48053C4F293
|
S3150800015000B583B00023009301934FF48053C4F293
|
||||||
S3150800016002031A6842F001021A6059680022CFF6A3
|
S3150800016002031A6842F001021A6059680022CFF6A3
|
||||||
S31508000170FF020A405A601A6822F0847222F480321A
|
S31508000170FF020A405A601A6822F0847222F480321A
|
||||||
|
@ -28,8 +28,8 @@ S315080001905A604FF41F029A601A6842F480321A6055
|
||||||
S315080001A04FF48053C4F2020340F2DC52196801F49A
|
S315080001A04FF48053C4F2020340F2DC52196801F49A
|
||||||
S315080001B000310191009901310091019911B9009915
|
S315080001B000310191009901310091019911B9009915
|
||||||
S315080001C09142F3D14FF48053C4F202031B6813F42F
|
S315080001C09142F3D14FF48053C4F202031B6813F42F
|
||||||
S315080001D0003F06D141F25400C0F600006E2100F03F
|
S315080001D0003F06D141F26000C0F600006E2100F033
|
||||||
S315080001E0FDFA4FF40053C4F202031A6842F01002F3
|
S315080001E0FFFA4FF40053C4F202031A6842F01002F1
|
||||||
S315080001F01A601A6822F003021A601A6842F00202AC
|
S315080001F01A601A6822F003021A601A6842F00202AC
|
||||||
S315080002001A604FF48053C4F202035A685A605A6857
|
S315080002001A604FF48053C4F202035A685A605A6857
|
||||||
S3150800021042F400525A605A6842F480625A605A6838
|
S3150800021042F400525A605A6842F480625A605A6838
|
||||||
|
@ -43,15 +43,15 @@ S315080002809A6942F005029A614FF40063C4F20103C9
|
||||||
S315080002901A6822F470621A601A6842F430621A60A8
|
S315080002901A6822F470621A601A6842F430621A60A8
|
||||||
S315080002A01A6822F470421A601A6842F480421A6088
|
S315080002A01A6822F470421A601A6842F480421A6088
|
||||||
S315080002B000F004F800F010F8FCE700BF08B500F0FD
|
S315080002B000F004F800F010F8FCE700BF08B500F0FD
|
||||||
S315080002C091FA00F087FA00F0C7FB00F0A7FB00F0F0
|
S315080002C093FA00F089FA00F0C9FB00F0A9FB00F0E8
|
||||||
S315080002D00DF800F06DFA08BD08B500F07DFA00F0DB
|
S315080002D00DF800F06FFA08BD08B500F07FFA00F0D7
|
||||||
S315080002E0D7FB00F00FF800F043FA08BD08B500F098
|
S315080002E0D9FB00F00FF800F045FA08BD08B500F094
|
||||||
S315080002F063F800F0CDFA40F20003C2F200030022D0
|
S315080002F063F800F0CFFA40F20003C2F200030022CE
|
||||||
S315080003001A7008BD08B540F20400C2F2000000F0F9
|
S315080003001A7008BD08B540F20400C2F2000000F0F9
|
||||||
S3150800031009FB01280BD140F20003C2F200030022B8
|
S315080003100BFB01280BD140F20003C2F200030022B6
|
||||||
S315080003201A7040F20400C2F2000000F065F808BD39
|
S315080003201A7040F20400C2F2000000F065F808BD39
|
||||||
S31508000330704700BF08B540F20003C2F200031B78FD
|
S31508000330704700BF08B540F20003C2F200031B78FD
|
||||||
S3150800034013B9C9B200F0BAFA00F04EF808BD00BFFA
|
S3150800034013B9C9B200F0BCFA00F04EF808BD00BFF8
|
||||||
S3150800035040F20003C2F200031878022806D00328E8
|
S3150800035040F20003C2F200031878022806D00328E8
|
||||||
S3150800036006D001280CBF082040207047002070479F
|
S3150800036006D001280CBF082040207047002070479F
|
||||||
S315080003700020704740F20003C2F2000318780228F2
|
S315080003700020704740F20003C2F2000318780228F2
|
||||||
|
@ -63,219 +63,220 @@ S315080003C000221A709A6483F84320A3F844209A708E
|
||||||
S315080003D05A70704740F24403C2F20003187800309E
|
S315080003D05A70704740F24403C2F20003187800309E
|
||||||
S315080003E018BF0120704700BF40F24403C2F2000361
|
S315080003E018BF0120704700BF40F24403C2F2000361
|
||||||
S315080003F0002283F84320704738B504460178FF2960
|
S315080003F0002283F84320704738B504460178FF2960
|
||||||
S315080004001CD140F24404C2F20004002363700125A3
|
S315080004001ED140F24404C2F20004002363700125A1
|
||||||
S315080004102570FF22E270102222716371FFF798FFA0
|
S315080004102570FF22E270102222716371FFF798FFA0
|
||||||
S31508000420A071FFF7A7FFE071FFF7A4FF000A20728B
|
S31508000420A071FFF7A7FFE071FFF7A4FF000A20728B
|
||||||
S315080004306572A5720823A4F8443079E140F24403B2
|
S315080004306572A5720823A4F8443000F0F1FA79E150
|
||||||
S31508000440C2F200031B78012B40F09081C939352987
|
S3150800044040F24403C2F200031B78012B40F090816E
|
||||||
S3150800045000F26B81DFE811F0DB00690169016501D3
|
S31508000450C939352900F26B81DFE811F0DB00690143
|
||||||
S31508000460690169015901FC0042012F01690169010D
|
S3150800046069016501690169015901FC0042012F0111
|
||||||
S31508000470690169016901690169016901690169011E
|
S31508000470690169016901690169016901690169011E
|
||||||
S31508000480690169016901690169016901690169010E
|
S31508000480690169016901690169016901690169010E
|
||||||
S3150800049069016901690169016901690169016901FE
|
S3150800049069016901690169016901690169016901FE
|
||||||
S315080004A06901690169016901690169017F005400EF
|
S315080004A069016901690169016901690169016901EE
|
||||||
S315080004B036007300690169016901A1006901B90083
|
S315080004B07F00540036007300690169016901A100D3
|
||||||
S315080004C0BD00CE004578FFF743FF0138854203DDBE
|
S315080004C06901B900BD00CE004578FFF741FF013844
|
||||||
S315080004D02220FFF765FF2BE140F24405C2F2000532
|
S315080004D0854203DD2220FFF763FF2BE140F2440546
|
||||||
S315080004E0281DA96C627800F09BF9FF23EB706278EF
|
S315080004E0C2F20005281DA96C627800F09BF9FF236B
|
||||||
S315080004F0AB6C1344AB6463780133A5F8443017E159
|
S315080004F0EB706278AB6C1344AB6463780133A5F890
|
||||||
S315080005004578FFF725FF0138854203DD2220FFF7EE
|
S31508000500443017E14578FFF723FF0138854203DDBC
|
||||||
S3150800051047FF0DE1616840F24405C2F20005A9648F
|
S315080005102220FFF745FF0DE1616840F24405C2F26B
|
||||||
S31508000520281D627800F07CF9FF23EB706278AB6CCB
|
S315080005200005A964281D627800F07CF9FF23EB70AA
|
||||||
S315080005301344AB6463780133A5F84430F8E040F21D
|
S315080005306278AB6C1344AB6463780133A5F8443036
|
||||||
S315080005404403C2F20003FF22DA7042689A64012269
|
S31508000540F8E040F24403C2F20003FF22DA70426880
|
||||||
S31508000550A3F84420ECE040F24403C2F20003FF2271
|
S315080005509A640122A3F84420ECE040F24403C2F274
|
||||||
S31508000560DA709B6C406840B11844002213F8011BEE
|
S315080005600003FF22DA709B6C406840B118440022F1
|
||||||
S315080005700A44D2B28342F9D100E0002240F2440391
|
S3150800057013F8011B0A44D2B28342F9D100E00022E3
|
||||||
S31508000580C2F20003C3F8072001221A7100225A7129
|
S3150800058040F24403C2F20003C3F8072001221A719D
|
||||||
S315080005909A710822A3F84420CAE040F24403C2F242
|
S3150800059000225A719A710822A3F84420CAE040F250
|
||||||
S315080005A00003FF22DA7041F25C02C0F600029A6488
|
S315080005A04403C2F20003FF22DA7041F26802C0F681
|
||||||
S315080005B000221A715A719A710721D9711A725A72E0
|
S315080005B000029A6400221A715A719A710721D97138
|
||||||
S315080005C09A720822A3F84420B2E00020FFF7E8FE5A
|
S315080005C01A725A729A720822A3F84420B2E00020DE
|
||||||
S315080005D0AEE040F24403C2F20003FF22DA700022C2
|
S315080005D0FFF7E6FEAEE040F24403C2F20003FF2254
|
||||||
S315080005E01A71597859719A71DA711A720622A3F832
|
S315080005E0DA7000221A71597859719A71DA711A7289
|
||||||
S315080005F044209DE040F24403C2F2000300221A7030
|
S315080005F00622A3F844209DE040F24403C2F2000319
|
||||||
S315080006005A70FF22DA700122A3F8442090E040F2E3
|
S3150800060000221A705A70FF22DA700122A3F84420D9
|
||||||
S315080006104403C2F200039D6CFFF79AFE411E28466A
|
S3150800061090E040F24403C2F200039D6CFFF798FE97
|
||||||
S31508000620621C00F0FFF918B93120FFF7B9FE7FE028
|
S31508000620411E2846621C00F0FFF918B93120FFF771
|
||||||
S3150800063040F24404C2F20004FF23E370A56CFFF7FE
|
S31508000630B7FE7FE040F24404C2F20004FF23E370F1
|
||||||
S3150800064087FE013D2844A0640123A4F844306FE0E6
|
S31508000640A56CFFF785FE013D2844A0640123A4F8A4
|
||||||
S315080006504578FFF77DFE0238854203DD2220FFF745
|
S3150800065044306FE04578FFF77BFE0238854203DDBC
|
||||||
S315080006609FFE65E040F24403C2F20003FF22DA70FF
|
S315080006602220FFF79DFE65E040F24403C2F2000334
|
||||||
S315080006700122A3F84420617839B900F0E3F900288B
|
S31508000670FF22DA700122A3F84420617839B900F024
|
||||||
S3150800068056D13120FFF78CFE52E040F24403C2F205
|
S31508000680E3F9002856D13120FFF78AFE52E040F2FE
|
||||||
S315080006900003986CA21C00F0C5F918B93120FFF7C1
|
S315080006904403C2F20003986CA21C00F0C5F918B90D
|
||||||
S315080006A07FFE45E040F24403C2F2000361789A6C8B
|
S315080006A03120FFF77DFE45E040F24403C2F2000325
|
||||||
S315080006B00A449A643CE040F24404C2F20004FF2370
|
S315080006B061789A6C0A449A643CE040F24404C2F2B7
|
||||||
S315080006C0E370002525716571FFF742FEA071E5719B
|
S315080006C00004FF23E370002525716571FFF740FEDE
|
||||||
S315080006D0257265720723A4F8443029E040F24403E2
|
S315080006D0A071E571257265720723A4F8443029E0F4
|
||||||
S315080006E0C2F20003986C616800F0A0F918B93120CD
|
S315080006E040F24403C2F20003986C616800F0A0F976
|
||||||
S315080006F0FFF756FE1CE040F24403C2F20003FF2255
|
S315080006F018B93120FFF754FE1CE040F24403C2F259
|
||||||
S31508000700DA700122A3F8442012E000F06FF840F2F4
|
S315080007000003FF22DA700122A3F8442012E000F069
|
||||||
S315080007104403C2F20003FF22DA700122A3F8442040
|
S315080007106FF840F24403C2F20003FF22DA700122A6
|
||||||
S3150800072006E03120FFF73CFE02E02020FFF738FE06
|
S31508000720A3F8442006E03120FFF73AFE02E0202035
|
||||||
S3150800073040F24403C2F2000393F84330012B02D17E
|
S31508000730FFF736FE40F24403C2F2000393F8433053
|
||||||
S315080007401020FFF72DFE40F24403C2F20003B3F86F
|
S31508000740012B02D11020FFF72BFE40F24403C2F220
|
||||||
S3150800075044100BB2002B09DD40F24400C2F200003F
|
S315080007500003B3F844100BB2002B09DD40F2440045
|
||||||
S31508000760012380F843300330FFF7E4FD38BD00BFAE
|
S31508000760C2F20000012380F843300330FFF7E2FDB0
|
||||||
S3150800077008B5FFF711FE012819D040F29003C2F21E
|
S3150800077038BD00BF08B5FFF70FFE012819D040F2B3
|
||||||
S3150800078000031B78012B12D100F094F940F2940370
|
S315080007809003C2F200031B78012B12D100F094F9F2
|
||||||
S31508000790C2F200031B6803F5FA73984207D340F2C6
|
S3150800079040F29403C2F200031B6803F5FA73984209
|
||||||
S315080007A09003C2F2000300221A7000F01FF808BD79
|
S315080007A007D340F29003C2F2000300221A7000F049
|
||||||
S315080007B008B540F29003C2F2000301221A7000F055
|
S315080007B01FF808BD08B540F29003C2F200030122F3
|
||||||
S315080007C079F940F29403C2F200031860FFF7D0FFEC
|
S315080007C01A7000F079F940F29403C2F20003186037
|
||||||
S315080007D008BD00BF704700BF704700BF08B5FFF7E8
|
S315080007D0FFF7D0FF08BD00BF704700BF704700BFD6
|
||||||
S315080007E0FBFFFCE708B500F003FC08BD10B500F0F8
|
S315080007E008B5FFF7FBFFFCE708B500F003FC08BDFA
|
||||||
S315080007F021F9A0B1FFF79CFD00F042F900F01EF9BF
|
S315080007F010B500F021F9A0B1FFF79AFD00F042F913
|
||||||
S3150800080020F0604020F07F004EF60853CEF2000339
|
S3150800080000F01EF920F0604020F07F004EF60853F5
|
||||||
S31508000810186000F013F9446800F0ECFBA04710BD1F
|
S31508000810CEF20003186000F013F9446800F0ECFB10
|
||||||
S3150800082070B5561EB6B24AB14C1E0E44451A14F897
|
S31508000820A04710BD70B5561EB6B24AB14C1E0E444E
|
||||||
S31508000830013F2B55FFF7D0FFB442F8D170BD00BF7A
|
S31508000830451A14F8013F2B55FFF7D0FFB442F8D1FB
|
||||||
S3150800084010B54FF48843C4F200031B8803F08003F5
|
S3150800084070BD00BF10B54FF48843C4F200031B887F
|
||||||
S315080008509BB2B3B14FF48843C4F2000398801B8857
|
S3150800085003F080039BB2B3B14FF48843C4F200039C
|
||||||
S3150800086003F080039BB273B94FF48844C4F20004C2
|
S3150800086098801B8803F080039BB273B94FF48844C1
|
||||||
S31508000870FFF7B2FF238803F080039BB2002BF7D063
|
S31508000870C4F20004FFF7B2FF238803F080039BB29B
|
||||||
S3150800088003E0002010BD012010BD012010BD00BFEF
|
S31508000880002BF7D003E0002010BD012010BD012089
|
||||||
S315080008904FF48843C4F2000300221A819A811A820F
|
S3150800089010BD00BF4FF48843C4F2000300221A813A
|
||||||
S315080008A09A821A8340F271221A819A8992B242F484
|
S315080008A09A811A829A821A8340F271221A819A8947
|
||||||
S315080008B0005242F00C029A81704700BF2DE9F041C0
|
S315080008B092B242F4005242F00C029A81704700BF8D
|
||||||
S315080008C006460C46402906D941F26400C0F60000E7
|
S315080008C02DE9F04106460C46402906D941F270004A
|
||||||
S315080008D08D21FFF783FF2046FFF7B2FF012806D0D8
|
S315080008D0C0F600008D21FFF783FF2046FFF7B2FF21
|
||||||
S315080008E041F26400C0F600009121FFF777FF254624
|
S315080008E0012806D041F27000C0F600009121FFF7FA
|
||||||
S315080008F0ACB1002441F26407C0F600074FF09A082D
|
S315080008F077FF2546ACB1002441F27007C0F6000721
|
||||||
S31508000900FFF76AFF305DFFF79BFF012803D03846E3
|
S315080009004FF09A08FFF76AFF305DFFF79BFF012853
|
||||||
S315080009104146FFF763FF0134A3B2AB42F0D3BDE80B
|
S3150800091003D038464146FFF763FF0134A3B2AB4222
|
||||||
S31508000920F08100BF10B540F2E403C2F200031B7861
|
S31508000920F0D3BDE8F08100BF10B540F2E103C2F292
|
||||||
S315080009305BBB4FF48843C4F200031B8803F0200313
|
S3150800093000031B785BBB4FF48843C4F200031B8893
|
||||||
S315080009409BB2002B56D04FF48843C4F200039A8812
|
S3150800094003F020039BB2002B56D04FF48843C4F221
|
||||||
S3150800095092B240F2A003C2F200031A7012F0FF0F1F
|
S3150800095000039A8892B240F29C03C2F200031A700E
|
||||||
S315080009604AD000F0A7F840F29803C2F200031860D4
|
S3150800096012F0FF0F4AD000F0A7F840F29803C2F23F
|
||||||
S3150800097040F29C03C2F200030020187040F2E40320
|
S315080009700003186040F2E003C2F20003002018707A
|
||||||
S31508000980C2F2000301221A7010BD40F29C03C2F2A3
|
S3150800098040F2E103C2F2000301221A7010BD40F2E0
|
||||||
S3150800099000031A784FF48843C4F200031B8803F057
|
S31508000990E003C2F200031A784FF48843C4F2000356
|
||||||
S315080009A020039BB263B34FF48843C4F200039C88C8
|
S315080009A01B8803F020039BB263B34FF48843C4F259
|
||||||
S315080009B040F2A003C2F2000399184C700132D2B279
|
S315080009B000039C8840F29C03C2F2000399184C700D
|
||||||
S315080009C040F29C01C2F200010A701B78934215D1CD
|
S315080009C00132D2B240F2E001C2F200010A701B788D
|
||||||
S315080009D01149FFF725FF40F2E403C2F200030022A3
|
S315080009D0934215D11149FFF725FF40F2E103C2F210
|
||||||
S315080009E01A70012010BD40F2E403C2F20003002091
|
S315080009E0000300221A70012010BD40F2E103C2F292
|
||||||
S315080009F0187010BD002010BD002010BD002010BDCD
|
S315080009F000030020187010BD002010BD002010BD97
|
||||||
S31508000A0000F058F840F29803C2F200031B686433FA
|
S31508000A00002010BD00F058F840F29803C2F2000327
|
||||||
S31508000A109842E8D8002010BDA100002008B500F0D3
|
S31508000A101B6864339842E8D8002010BD9D0000206A
|
||||||
S31508000A205BF908BD08B500F065F908BD08B500F022
|
S31508000A2008B500F05BF908BD08B500F065F908BD22
|
||||||
S31508000A3089F908BD08B500F071FA08BD08B500F0D7
|
S31508000A3008B500F089F908BD08B500F071FA08BDD7
|
||||||
S31508000A40C7FA08BD08B500F03DFA10B100F09AFAE9
|
S31508000A4008B500F0C7FA08BD08B500F03DFA10B1C0
|
||||||
S31508000A5008BD002008BD00BF4EF21003CEF2000309
|
S31508000A5000F09AFA08BD002008BD00BF4EF2100348
|
||||||
S31508000A6000221A6041F63F11C0F2010159609A60EE
|
S31508000A60CEF2000300221A6041F63F11C0F20101DE
|
||||||
S31508000A700521196040F2E803C2F200031A607047C4
|
S31508000A7059609A600521196040F2E403C2F2000346
|
||||||
S31508000A804EF21003CEF2000300221A60704700BF30
|
S31508000A801A6070474EF21003CEF2000300221A6075
|
||||||
S31508000A904EF21003CEF200031B6813F4803F1FBF0B
|
S31508000A90704700BF4EF21003CEF200031B6813F432
|
||||||
S31508000AA040F2E803C2F200031A68013218BF1A605E
|
S31508000AA0803F1FBF40F2E403C2F200031A68013216
|
||||||
S31508000AB0704700BF08B5FFF7EBFF40F2E803C2F244
|
S31508000AB018BF1A60704700BF08B5FFF7EBFF40F292
|
||||||
S31508000AC00003186808BD00BF4FF40053C4F20203C0
|
S31508000AC0E403C2F20003186808BD00BF4FF40053E0
|
||||||
S31508000AD01A6942F080021A61704700BFF8B50746E6
|
S31508000AD0C4F202031A6942F080021A61704700BF25
|
||||||
S31508000AE00024254641F28C06C0F60006FFF774FE80
|
S31508000AE0F8B507460024254641F29806C0F60006E2
|
||||||
S31508000AF0A359BB420ED8311949680B449F4209D203
|
S31508000AF0FFF774FEA359BB420ED8311949680B4457
|
||||||
S31508000B0041F28C03C0F6000305EB450203EB8203B2
|
S31508000B009F4209D241F29803C0F6000305EB45025D
|
||||||
S31508000B10187AF8BD01350C349C2CE7D1FF20F8BDB6
|
S31508000B1003EB8203187AF8BD01350C349C2CE7D117
|
||||||
S31508000B202DE9F84380460068FFF7D8FFFF285CD018
|
S31508000B20FF20F8BD2DE9F84380460068FFF7D8FF97
|
||||||
S31508000B304FF40053C4F2020340F22312C4F2675280
|
S31508000B30FF285CD04FF40053C4F2020340F223129C
|
||||||
S31508000B405A6048F6AB12CCF6EF525A603422DA6095
|
S31508000B40C4F267525A6048F6AB12CCF6EF525A60B6
|
||||||
S31508000B50DB6813F0010F04D0FFF7B6FF0020BDE8ED
|
S31508000B503422DA60DB6813F0010F04D0FFF7B6FF22
|
||||||
S31508000B60F8834FF40053C4F202031A6942F00102F3
|
S31508000B600020BDE8F8834FF40053C4F202031A6963
|
||||||
S31508000B701A61002508F104094FF40054C4F202046E
|
S31508000B7042F001021A61002508F104094FF40054F5
|
||||||
S31508000B80D8F80030EF1859F80560B2B2EA52E368AF
|
S31508000B80C4F20204D8F80030EF1859F80560B2B27A
|
||||||
S31508000B9013F0010F05D0FFF71FFEE36813F0010FEE
|
S31508000B90EA52E36813F0010F05D0FFF71FFEE3687A
|
||||||
S31508000BA0F9D1330C7B80E36813F0010F05D0FFF70A
|
S31508000BA013F0010FF9D1330C7B80E36813F0010FC2
|
||||||
S31508000BB013FEE36813F0010FF9D13B68B34204D181
|
S31508000BB005D0FFF713FEE36813F0010FF9D13B6880
|
||||||
S31508000BC00435B5F5007FDBD101E0002400E00124FF
|
S31508000BC0B34204D10435B5F5007FDBD101E000243A
|
||||||
S31508000BD04FF40053C4F202031A6922F001021A61A3
|
S31508000BD000E001244FF40053C4F202031A6922F01C
|
||||||
S31508000BE0FFF772FF2046BDE8F8830020BDE8F883CA
|
S31508000BE001021A61FFF772FF2046BDE8F88300206C
|
||||||
S31508000BF038B504460D4640F2EC03C2F200039842AB
|
S31508000BF0BDE8F88338B504460D4640F2E803C2F26C
|
||||||
S31508000C0009D04FF4C043C0F6000399420BD0FFF752
|
S31508000C000003984209D04FF4C043C0F60003994246
|
||||||
S31508000C1087FF20B917E040F2F024C2F20004C5F3BA
|
S31508000C100BD0FFF787FF20B917E040F2EC24C2F2A9
|
||||||
S31508000C20080393B903E040F2EC04C2F20004236817
|
S31508000C200004C5F3080393B903E040F2E804C2F2EE
|
||||||
S31508000C309D420CD0204640F8045B29464FF40072CA
|
S31508000C30000423689D420CD0204640F8045B2946F0
|
||||||
S31508000C40FFF7EEFD03E0002038BD002038BD204642
|
S31508000C404FF40072FFF7EEFD03E0002038BD0020E8
|
||||||
S31508000C5038BD00BF2DE9F04106460C4617461D462D
|
S31508000C5038BD204638BD00BF2DE9F04106460C4692
|
||||||
S31508000C604FEA51284FEA48280368B3F1FF3F06D1F7
|
S31508000C6017461D464FEA51284FEA48280368B3F14C
|
||||||
S31508000C7040F8048B41464FF40072FFF7D1FD336804
|
S31508000C70FF3F06D140F8048B41464FF40072FFF758
|
||||||
S31508000C80434505D030464146FFF7B2FF0646D0B188
|
S31508000C80D1FD3368434505D030464146FFF7B2FFEC
|
||||||
S31508000C903368E41A3444043408F50078FFF79CFDF9
|
S31508000C900646D0B13368E41A3444043408F50078BB
|
||||||
S31508000CA0331DE31AB3F5007F06D330464146FFF7F6
|
S31508000CA0FFF79CFD331DE31AB3F5007F06D33046E4
|
||||||
S31508000CB09FFF064650B1041D17F8013B04F8013B97
|
S31508000CB04146FFF79FFF064650B1041D17F8013B52
|
||||||
S31508000CC0013DEBD105E00020BDE8F0810020BDE83C
|
S31508000CC004F8013B013DEBD105E00020BDE8F081C9
|
||||||
S31508000CD0F0810120BDE8F08140F2F023C2F2000362
|
S31508000CD00020BDE8F0810120BDE8F08140F2EC2358
|
||||||
S31508000CE04FF0FF321A6040F2EC03C2F200031A60BA
|
S31508000CE0C2F200034FF0FF321A6040F2E803C2F284
|
||||||
S31508000CF0704700BF70B504460D461646FFF7EEFE70
|
S31508000CF000031A60704700BF70B504460D461646D5
|
||||||
S31508000D00FF281BD0681E2044FFF7E8FEFF2817D0EF
|
S31508000D00FFF7EEFEFF281BD0681E2044FFF7E8FE1B
|
||||||
S31508000D10620A4FF4C043C0F60003B3EB422F07BF85
|
S31508000D10FF2817D0620A4FF4C043C0F60003B3EBAE
|
||||||
S31508000D2040F2EC00C2F2000040F2F020C2F20000ED
|
S31508000D20422F07BF40F2E800C2F2000040F2EC2072
|
||||||
S31508000D30214632462B46FFF78DFF70BD002070BD59
|
S31508000D30C2F20000214632462B46FFF78DFF70BDF2
|
||||||
S31508000D40002070BD2DE9F84304460E46FFF7C6FE9F
|
S31508000D40002070BD002070BD2DE9F84304460E460C
|
||||||
S31508000D500546701E2044FFF7C1FE0446FF2D18BF46
|
S31508000D50FFF7C6FE0546701E2044FFF7C1FE04468F
|
||||||
S31508000D60FF2800F0AB80854200F29F80022D40F2FA
|
S31508000D60FF2D18BFFF2800F0AB80854200F29F8058
|
||||||
S31508000D709F800F2800F29F804FF40053C4F20203AD
|
S31508000D70022D40F29F800F2800F29F804FF4005307
|
||||||
S31508000D8040F22312C4F267525A6048F6AB12CCF608
|
S31508000D80C4F2020340F22312C4F267525A6048F6CC
|
||||||
S31508000D90EF525A603422DA60DB6813F0010F04D090
|
S31508000D90AB12CCF6EF525A603422DA60DB6813F0F5
|
||||||
S31508000DA0FFF792FE0020BDE8F8834FF40053C4F223
|
S31508000DA0010F04D0FFF792FE0020BDE8F8834FF448
|
||||||
S31508000DB002031A6942F002021A6141F28C09C0F66E
|
S31508000DB00053C4F202031A6942F002021A6141F2B0
|
||||||
S31508000DC000094F460026FFF707FD3B7AAB4208D1DC
|
S31508000DC09809C0F600094F460026FFF707FD3B7A4B
|
||||||
S31508000DD041F28C03C0F6000306EB460253F8227074
|
S31508000DD0AB4208D141F29803C0F6000306EB46027F
|
||||||
S31508000DE005E001360C370D2EEDD14FF0FF37C8461A
|
S31508000DE053F8227005E001360C370D2EEDD14FF081
|
||||||
S31508000DF00025FFF7F1FC98F80830A34208D141F224
|
S31508000DF0FF37C8460025FFF7F1FC98F80830A342EC
|
||||||
S31508000E008C03C0F6000305EB450253F8228006E082
|
S31508000E0008D141F29803C0F6000305EB450253F8F2
|
||||||
S31508000E10013508F10C080D2DEBD14FF0FF384E4681
|
S31508000E10228006E0013508F10C080D2DEBD14FF0C4
|
||||||
S31508000E200025FFF7D9FC337AA34209D141F28C0396
|
S31508000E20FF384E460025FFF7D9FC337AA34209D18D
|
||||||
S31508000E30C0F6000305EB450203EB82035B6804E09A
|
S31508000E3041F29803C0F6000305EB450203EB820373
|
||||||
S31508000E4001350C360D2DECD10023C7EB08084344B9
|
S31508000E405B6804E001350C360D2DECD10023C7EBA9
|
||||||
S31508000E50C3F38F23E3B1013B9EB20136B6020025E8
|
S31508000E5008084344C3F38F23E3B1013B9EB201362E
|
||||||
S31508000E604FF40054C4F20204EB196361236943F09A
|
S31508000E60B60200254FF40054C4F20204EB1963617C
|
||||||
S31508000E7040032361E36813F0010F05D0FFF7ACFCCC
|
S31508000E70236943F040032361E36813F0010F05D0AB
|
||||||
S31508000E80E36813F0010FF9D105F58065B542EBD19A
|
S31508000E80FFF7ACFCE36813F0010FF9D105F58065AF
|
||||||
S31508000E904FF40053C4F202031A6922F002021A61DF
|
S31508000E90B542EBD14FF40053C4F202031A6922F0AB
|
||||||
S31508000EA0FFF712FE0120BDE8F8830020BDE8F883AD
|
S31508000EA002021A61FFF712FE0120BDE8F88300204E
|
||||||
S31508000EB00020BDE8F8830020BDE8F8830020BDE8DF
|
S31508000EB0BDE8F8830020BDE8F8830020BDE8F88384
|
||||||
S31508000EC0F88300BF00B583B040F2EC03C2F200031A
|
S31508000EC00020BDE8F88300BF00B583B040F2E80310
|
||||||
S31508000ED01B68B3F1FF3F08BF01201CD040F2EC03AA
|
S31508000ED0C2F200031B68B3F1FF3F08BF01201CD014
|
||||||
S31508000EE0C2F2000399685A681144DA6811441A690B
|
S31508000EE040F2E803C2F2000399685A681144DA68C6
|
||||||
S31508000EF011445A6911449A690A44D96953185B42DC
|
S31508000EF011441A6911445A6911449A690A44D9690C
|
||||||
S31508000F0002AA42F8043D46F25010C0F60000042139
|
S31508000F0053185B4202AA42F8043D46F25010C0F656
|
||||||
S31508000F10FFF7F0FEFFE703B05DF804FB46F20402B4
|
S31508000F1000000421FFF7F0FEFFE703B05DF804FBCD
|
||||||
S31508000F20C0F600024FF4C043C0F6000310681B6801
|
S31508000F2046F20402C0F600024FF4C043C0F60003BE
|
||||||
S31508000F30184446F20803C0F600031B68184446F234
|
S31508000F3010681B68184446F20803C0F600031B68CD
|
||||||
S31508000F400C03C0F600031B68184446F21003C0F6EB
|
S31508000F40184446F20C03C0F600031B68184446F220
|
||||||
S31508000F5000031B68184446F21403C0F600031B6816
|
S31508000F501003C0F600031B68184446F21403C0F6D3
|
||||||
S31508000F60184446F21803C0F600031B68184446F2F4
|
S31508000F6000031B68184446F21803C0F600031B6802
|
||||||
S31508000F705013C0F600031B681844D0F1010038BFAF
|
S31508000F70184446F25013C0F600031B681844D0F113
|
||||||
S31508000F800020704708B540F2EC03C2F200031B6864
|
S31508000F80010038BF0020704708B540F2E803C2F2F6
|
||||||
S31508000F90B3F1FF3F06D040F2EC00C2F20000FFF7C3
|
S31508000F9000031B68B3F1FF3F06D040F2E800C2F237
|
||||||
S31508000FA0BFFD88B140F2F023C2F200031B68B3F11B
|
S31508000FA00000FFF7BFFD88B140F2EC23C2F2000350
|
||||||
S31508000FB0FF3F0BD040F2F020C2F20000FFF7B0FD71
|
S31508000FB01B68B3F1FF3F0BD040F2EC20C2F20000F1
|
||||||
S31508000FC0003018BF012008BD002008BD012008BD5B
|
S31508000FC0FFF7B0FD003018BF012008BD002008BD9E
|
||||||
S31508000FD04FF4C040C0F60000704700BF08B541F2A4
|
S31508000FD0012008BD4FF4C040C0F60000704700BFAE
|
||||||
S31508000FE02810C0F600003121FFF7F8FB08BD00BF46
|
S31508000FE008B541F23410C0F600003121FFF7F8FBCE
|
||||||
S31508000FF072B6704762B6704710B540F20002C2F288
|
S31508000FF008BD00BF72B6704762B6704710B515498E
|
||||||
S31508001000000240F20103C2F200039A4210D2131DF5
|
S315080010008D4640F20002C2F2000240F20103C2F22B
|
||||||
S315080010100D4CE41A24F0030404340023104641F26C
|
S3150800101000039A4210D2131D0D4CE41A24F003045F
|
||||||
S315080010205811C0F600015A581A500433A342FAD18F
|
S3150800102004340023104641F26411C0F600015A58F0
|
||||||
S31508001030064807494FF000028842B8BF40F8042B1B
|
S315080010301A500433A342FAD1074808494FF0000270
|
||||||
S31508001040FADBFFF785F810BD040000200400002035
|
S315080010408842B8BF40F8042BFADBFFF781F810BDD9
|
||||||
S31508001050F40400206D61696E2E6300004F70656EA2
|
S3150800105004000020F006002004000020F004002010
|
||||||
S31508001060424C54002E2E2F2E2E2F2E2E2F536F75B8
|
S315080010606D61696E2E6300004F70656E424C5400C8
|
||||||
S315080010707263652F41524D434D335F53544D33329E
|
S315080010702E2E2F2E2E2F2E2E2F536F757263652F21
|
||||||
S3150800108046312F756172742E6300000000600008F7
|
S3150800108041524D434D335F53544D333246312F75DC
|
||||||
S315080010900020000003000000008000080020000077
|
S315080010906172742E630000000060000800200000E2
|
||||||
S315080010A00400000000A00008002000000500000061
|
S315080010A00300000000800008002000000400000083
|
||||||
S315080010B000C00008002000000600000000E000084C
|
S315080010B000A00008002000000500000000C000088D
|
||||||
S315080010C000200000070000000000010800200000C2
|
S315080010C0002000000600000000E0000800200000E4
|
||||||
S315080010D008000000002001080020000009000000A8
|
S315080010D007000000000001080020000008000000CA
|
||||||
S315080010E000400108002000000A0000000060010816
|
S315080010E00020010800200000090000000040010857
|
||||||
S315080010F0002000000B00000000800108002000000E
|
S315080010F0002000000A00000000600108002000002F
|
||||||
S315080011000C00000000A00108002000000D000000EF
|
S315080011000B00000000800108002000000C00000011
|
||||||
S3150800111000C00108002000000E00000000E00108E1
|
S3150800111000A00108002000000D00000000C0010822
|
||||||
S31508001120002000000F0000002E2E2F2E2E2F2E2E10
|
S31508001120002000000E00000000E00108002000007A
|
||||||
S315080011302F536F757263652F41524D434D335F537D
|
S315080011300F0000002E2E2F2E2E2F2E2E2F536F75BA
|
||||||
S31508001140544D333246312F4743432F766563746FC8
|
S315080011407263652F41524D434D335F53544D3332CD
|
||||||
S30D0800115072732E630000000013
|
S3150800115046312F4743432F766563746F72732E6348
|
||||||
S306080011580484
|
S30908001160000000007D
|
||||||
|
S306080011640478
|
||||||
S70508000000F2
|
S70508000000F2
|
||||||
|
|
|
@ -103,42 +103,6 @@
|
||||||
#define BOOT_COM_UART_CHANNEL_INDEX (1)
|
#define BOOT_COM_UART_CHANNEL_INDEX (1)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable
|
|
||||||
* to 1. This enables support for firmware updates from a file stored on a locally
|
|
||||||
* attached file system such as an SD-card. Note that this interface can be enabled
|
|
||||||
* together with one of the remote communication interfaces such as UART, CAN or USB.
|
|
||||||
*
|
|
||||||
* Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during
|
|
||||||
* a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each
|
|
||||||
* time a new string formatted log entry is available. This could be used during testing
|
|
||||||
* by outputting the string on UART or to create a log file on the file system itself.
|
|
||||||
*
|
|
||||||
* Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error
|
|
||||||
* occurs during the firmware update. This could for example be used to turn on an error
|
|
||||||
* LED to inform the user that something went wrong. Inspecting the log messages provides
|
|
||||||
* additional information on the error cause.
|
|
||||||
*
|
|
||||||
* Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new
|
|
||||||
* firmware update is started by the bootloader.
|
|
||||||
*
|
|
||||||
* Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a
|
|
||||||
* firmware update is completed by the bootloader.
|
|
||||||
*/
|
|
||||||
/** \brief Enable/disable support for firmware updates from a locally attached storage.*/
|
|
||||||
#define BOOT_FILE_SYS_ENABLE (0)
|
|
||||||
/** \brief Enable/disable logging messages during firmware updates. */
|
|
||||||
#define BOOT_FILE_LOGGING_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called upon detection of an error. */
|
|
||||||
#define BOOT_FILE_ERROR_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called at the start of the update. */
|
|
||||||
#define BOOT_FILE_STARTED_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called at the end of the update. */
|
|
||||||
#define BOOT_FILE_COMPLETED_HOOK_ENABLE (0)
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -1,192 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------/
|
|
||||||
/ FatFs - FAT file system module configuration file R0.09b (C)ChaN, 2013
|
|
||||||
/----------------------------------------------------------------------------/
|
|
||||||
/
|
|
||||||
/ CAUTION! Do not forget to make clean the project after any changes to
|
|
||||||
/ the configuration options.
|
|
||||||
/
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
#ifndef _FFCONF
|
|
||||||
#define _FFCONF 82786 /* Revision ID */
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
|
||||||
/ Functions and Buffer Configurations
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
|
|
||||||
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
|
|
||||||
/ object instead of the sector buffer in the individual file object for file
|
|
||||||
/ data transfer. This reduces memory consumption 512 bytes each file object. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
|
|
||||||
/* Setting _FS_READONLY to 1 defines read only configuration. This removes
|
|
||||||
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
|
|
||||||
/ f_truncate and useless f_getfree. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_MINIMIZE 0 /* 0 to 3 */
|
|
||||||
/* The _FS_MINIMIZE option defines minimization level to remove some functions.
|
|
||||||
/
|
|
||||||
/ 0: Full function.
|
|
||||||
/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
|
|
||||||
/ are removed.
|
|
||||||
/ 2: f_opendir and f_readdir are removed in addition to 1.
|
|
||||||
/ 3: f_lseek is removed in addition to 2. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */
|
|
||||||
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_MKFS 0 /* 0:Disable or 1:Enable */
|
|
||||||
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */
|
|
||||||
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_LABEL 0 /* 0:Disable or 1:Enable */
|
|
||||||
/* To enable volume label functions, set _USE_LAVEL to 1 */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
|
|
||||||
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
|
||||||
/ Locale and Namespace Configurations
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define _CODE_PAGE 437
|
|
||||||
/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
|
|
||||||
/ Incorrect setting of the code page can cause a file open failure.
|
|
||||||
/
|
|
||||||
/ 932 - Japanese Shift-JIS (DBCS, OEM, Windows)
|
|
||||||
/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows)
|
|
||||||
/ 949 - Korean (DBCS, OEM, Windows)
|
|
||||||
/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows)
|
|
||||||
/ 1250 - Central Europe (Windows)
|
|
||||||
/ 1251 - Cyrillic (Windows)
|
|
||||||
/ 1252 - Latin 1 (Windows)
|
|
||||||
/ 1253 - Greek (Windows)
|
|
||||||
/ 1254 - Turkish (Windows)
|
|
||||||
/ 1255 - Hebrew (Windows)
|
|
||||||
/ 1256 - Arabic (Windows)
|
|
||||||
/ 1257 - Baltic (Windows)
|
|
||||||
/ 1258 - Vietnam (OEM, Windows)
|
|
||||||
/ 437 - U.S. (OEM)
|
|
||||||
/ 720 - Arabic (OEM)
|
|
||||||
/ 737 - Greek (OEM)
|
|
||||||
/ 775 - Baltic (OEM)
|
|
||||||
/ 850 - Multilingual Latin 1 (OEM)
|
|
||||||
/ 858 - Multilingual Latin 1 + Euro (OEM)
|
|
||||||
/ 852 - Latin 2 (OEM)
|
|
||||||
/ 855 - Cyrillic (OEM)
|
|
||||||
/ 866 - Russian (OEM)
|
|
||||||
/ 857 - Turkish (OEM)
|
|
||||||
/ 862 - Hebrew (OEM)
|
|
||||||
/ 874 - Thai (OEM, Windows)
|
|
||||||
/ 1 - ASCII only (Valid for non LFN cfg.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_LFN 1 /* 0 to 3 */
|
|
||||||
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
|
|
||||||
/* The _USE_LFN option switches the LFN support.
|
|
||||||
/
|
|
||||||
/ 0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
|
|
||||||
/ 1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
|
|
||||||
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
|
||||||
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
|
||||||
/
|
|
||||||
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
|
|
||||||
/ Unicode handling functions ff_convert() and ff_wtoupper() must be added
|
|
||||||
/ to the project. When enable to use heap, memory control functions
|
|
||||||
/ ff_memalloc() and ff_memfree() must be added to the project. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
|
|
||||||
/* To switch the character code set on FatFs API to Unicode,
|
|
||||||
/ enable LFN feature and set _LFN_UNICODE to 1. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_RPATH 0 /* 0 to 2 */
|
|
||||||
/* The _FS_RPATH option configures relative path feature.
|
|
||||||
/
|
|
||||||
/ 0: Disable relative path feature and remove related functions.
|
|
||||||
/ 1: Enable relative path. f_chdrive() and f_chdir() are available.
|
|
||||||
/ 2: f_getcwd() is available in addition to 1.
|
|
||||||
/
|
|
||||||
/ Note that output of the f_readdir fnction is affected by this option. */
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
|
||||||
/ Physical Drive Configurations
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define _VOLUMES 1
|
|
||||||
/* Number of volumes (logical drives) to be used. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
|
|
||||||
/* Maximum sector size to be handled.
|
|
||||||
/ Always set 512 for memory card and hard disk but a larger value may be
|
|
||||||
/ required for on-board flash memory, floppy disk and optical disk.
|
|
||||||
/ When _MAX_SS is larger than 512, it configures FatFs to variable sector size
|
|
||||||
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Enable multiple partition */
|
|
||||||
/* When set to 0, each volume is bound to the same physical drive number and
|
|
||||||
/ it can mount only first primaly partition. When it is set to 1, each volume
|
|
||||||
/ is tied to the partitions listed in VolToPart[]. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _USE_ERASE 0 /* 0:Disable or 1:Enable */
|
|
||||||
/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
|
|
||||||
/ should be added to the disk_ioctl functio. */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
|
||||||
/ System Configurations
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define _WORD_ACCESS 0 /* 0 or 1 */
|
|
||||||
/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
|
|
||||||
/ option defines which access method is used to the word data on the FAT volume.
|
|
||||||
/
|
|
||||||
/ 0: Byte-by-byte access.
|
|
||||||
/ 1: Word access. Do not choose this unless following condition is met.
|
|
||||||
/
|
|
||||||
/ When the byte order on the memory is big-endian or address miss-aligned word
|
|
||||||
/ access results incorrect behavior, the _WORD_ACCESS must be set to 0.
|
|
||||||
/ If it is not the case, the value can also be set to 1 to improve the
|
|
||||||
/ performance and code size.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* A header file that defines sync object types on the O/S, such as
|
|
||||||
/ windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
|
|
||||||
|
|
||||||
#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
|
|
||||||
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
|
|
||||||
#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
|
|
||||||
|
|
||||||
/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
|
|
||||||
/
|
|
||||||
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
|
|
||||||
/ 1: Enable reentrancy. Also user provided synchronization handlers,
|
|
||||||
/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
|
|
||||||
/ function must be added to the project. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
|
|
||||||
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
|
|
||||||
The value defines how many files can be opened simultaneously. */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _FFCONFIG */
|
|
|
@ -1,683 +0,0 @@
|
||||||
/*------------------------------------------------------------------------/
|
|
||||||
/ MMCv3/SDv1/SDv2 (in SPI mode) control module
|
|
||||||
/-------------------------------------------------------------------------/
|
|
||||||
/
|
|
||||||
/ Copyright (C) 2013, ChaN, all right reserved.
|
|
||||||
/
|
|
||||||
/ * This software is a free software and there is NO WARRANTY.
|
|
||||||
/ * No restriction on use. You can use, modify and redistribute it for
|
|
||||||
/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
|
|
||||||
/ * Redistributions of source code must retain the above copyright notice.
|
|
||||||
/
|
|
||||||
/-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file was modified from a sample available from the FatFs
|
|
||||||
* web site. It was modified to work with a Olimex STM32-P103
|
|
||||||
* evaluation board.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#include "diskio.h"
|
|
||||||
#include "stm32f10x.h" /* STM32 registers */
|
|
||||||
#include "stm32f10x_conf.h" /* STM32 peripheral drivers */
|
|
||||||
#include "boot.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Module Private Functions
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* Definitions for MMC/SDC command */
|
|
||||||
#define CMD0 (0) /* GO_IDLE_STATE */
|
|
||||||
#define CMD1 (1) /* SEND_OP_COND */
|
|
||||||
#define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */
|
|
||||||
#define CMD8 (8) /* SEND_IF_COND */
|
|
||||||
#define CMD9 (9) /* SEND_CSD */
|
|
||||||
#define CMD10 (10) /* SEND_CID */
|
|
||||||
#define CMD12 (12) /* STOP_TRANSMISSION */
|
|
||||||
#define ACMD13 (13|0x80) /* SD_STATUS (SDC) */
|
|
||||||
#define CMD16 (16) /* SET_BLOCKLEN */
|
|
||||||
#define CMD17 (17) /* READ_SINGLE_BLOCK */
|
|
||||||
#define CMD18 (18) /* READ_MULTIPLE_BLOCK */
|
|
||||||
#define CMD23 (23) /* SET_BLOCK_COUNT */
|
|
||||||
#define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */
|
|
||||||
#define CMD24 (24) /* WRITE_BLOCK */
|
|
||||||
#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
|
|
||||||
#define CMD41 (41) /* SEND_OP_COND (ACMD) */
|
|
||||||
#define CMD55 (55) /* APP_CMD */
|
|
||||||
#define CMD58 (58) /* READ_OCR */
|
|
||||||
|
|
||||||
|
|
||||||
/* Control signals (Platform dependent) */
|
|
||||||
#define CS_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_12) /* MMC CS = L */
|
|
||||||
#define CS_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_12) /* MMC CS = H */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define FCLK_SLOW() /* Set slow clock (100k-400k) */
|
|
||||||
#define FCLK_FAST() set_max_speed() /* Set fast clock (depends on the CSD) */
|
|
||||||
|
|
||||||
static volatile
|
|
||||||
DSTATUS Stat = STA_NOINIT; /* Disk status */
|
|
||||||
|
|
||||||
static
|
|
||||||
UINT CardType;
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Send 80 or so clock transitions with CS and DI held high. This is */
|
|
||||||
/* required after card power up to get it into SPI mode */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
static
|
|
||||||
void send_initial_clock_train(void)
|
|
||||||
{
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
/* Ensure CS is held high. */
|
|
||||||
CS_HIGH();
|
|
||||||
|
|
||||||
/* Switch the SSI TX line to a GPIO and drive it high too. */
|
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
||||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
||||||
GPIO_SetBits(GPIOB, GPIO_Pin_15);
|
|
||||||
|
|
||||||
/* Send 10 bytes over the SSI. This causes the clock to wiggle the */
|
|
||||||
/* required number of times. */
|
|
||||||
for(i = 0 ; i < 10 ; i++)
|
|
||||||
{
|
|
||||||
/* Loop while DR register in not empty */
|
|
||||||
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) { ; }
|
|
||||||
|
|
||||||
/* Send byte through the SPI peripheral */
|
|
||||||
SPI_I2S_SendData(SPI2, 0xff);
|
|
||||||
|
|
||||||
/* Wait to receive a byte */
|
|
||||||
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) { ; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Revert to hardware control of the SSI TX line. */
|
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
||||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Power Control (Platform dependent) */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* When the target system does not support socket power control, there */
|
|
||||||
/* is nothing to do in these functions. */
|
|
||||||
|
|
||||||
static
|
|
||||||
void power_on (void)
|
|
||||||
{
|
|
||||||
SPI_InitTypeDef SPI_InitStructure;
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This doesn't really turn the power on, but initializes the
|
|
||||||
* SSI port and pins needed to talk to the card.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Enable GPIO clock for CS */
|
|
||||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
|
||||||
/* Enable SPI clock, SPI2: APB1 */
|
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
|
|
||||||
/* Configure I/O for Flash Chip select (PB12) */
|
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
||||||
|
|
||||||
/* De-select the Card: Chip Select high */
|
|
||||||
GPIO_SetBits(GPIOB, GPIO_Pin_12);
|
|
||||||
|
|
||||||
/* Configure SPI pins: SCK (PB13) and MOSI (PB15) with default alternate function (not re-mapped) push-pull */
|
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
||||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
||||||
/* Configure MISO (PB14) as Input with internal pull-up */
|
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
||||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
||||||
|
|
||||||
/* SPI configuration */
|
|
||||||
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
|
||||||
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
||||||
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
||||||
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
||||||
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
||||||
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
||||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 72000kHz/256=281kHz < 400kHz
|
|
||||||
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
||||||
SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
||||||
|
|
||||||
SPI_Init(SPI2, &SPI_InitStructure);
|
|
||||||
SPI_CalculateCRC(SPI2, DISABLE);
|
|
||||||
SPI_Cmd(SPI2, ENABLE);
|
|
||||||
|
|
||||||
/* Set DI and CS high and apply more than 74 pulses to SCLK for the card */
|
|
||||||
/* to be able to accept a native command. */
|
|
||||||
send_initial_clock_train();
|
|
||||||
|
|
||||||
}
|
|
||||||
// set the SSI speed to the max setting
|
|
||||||
static
|
|
||||||
void set_max_speed(void)
|
|
||||||
{
|
|
||||||
SPI_InitTypeDef SPI_InitStructure;
|
|
||||||
|
|
||||||
/* Disable the SPI system */
|
|
||||||
SPI_Cmd(SPI2, DISABLE);
|
|
||||||
|
|
||||||
/* MMC/SDC can work at the clock frequency up to 20/25MHz so pick a speed close to
|
|
||||||
* this but not higher
|
|
||||||
*/
|
|
||||||
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
|
||||||
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
||||||
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
||||||
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
||||||
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
||||||
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
||||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 72MHz/4=18MHz < 20MHz
|
|
||||||
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
||||||
SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
||||||
SPI_Init(SPI2, &SPI_InitStructure);
|
|
||||||
SPI_CalculateCRC(SPI2, DISABLE);
|
|
||||||
|
|
||||||
/* Enable the SPI system */
|
|
||||||
SPI_Cmd(SPI2, ENABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void power_off (void)
|
|
||||||
{
|
|
||||||
Stat |= STA_NOINIT; /* Force uninitialized */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Transmit/Receive data to/from MMC via SPI (Platform dependent) */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
BYTE xchg_spi (BYTE dat)
|
|
||||||
{
|
|
||||||
/* Send byte through the SPI peripheral */
|
|
||||||
SPI_I2S_SendData(SPI2, dat);
|
|
||||||
|
|
||||||
/* Wait to receive a byte */
|
|
||||||
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) { ; }
|
|
||||||
|
|
||||||
/* Return the byte read from the SPI bus */
|
|
||||||
return (BYTE)SPI_I2S_ReceiveData(SPI2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void rcvr_spi_m (BYTE *dst)
|
|
||||||
{
|
|
||||||
*dst = xchg_spi(0xFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Wait for card ready */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
int wait_ready (void)
|
|
||||||
{
|
|
||||||
BYTE d;
|
|
||||||
ULONG timeOutTime;
|
|
||||||
|
|
||||||
/* set timeout for 500 ms from now */
|
|
||||||
timeOutTime = TimerGet() + 500;
|
|
||||||
|
|
||||||
do {
|
|
||||||
d = xchg_spi(0xFF);
|
|
||||||
} while ((d != 0xFF) && (TimerGet() < timeOutTime));
|
|
||||||
|
|
||||||
return (d == 0xFF) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Deselect the card and release SPI bus */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
void deselect (void)
|
|
||||||
{
|
|
||||||
CS_HIGH();
|
|
||||||
xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Select the card and wait ready */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
int select (void) /* 1:Successful, 0:Timeout */
|
|
||||||
{
|
|
||||||
CS_LOW();
|
|
||||||
xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
|
|
||||||
|
|
||||||
if (wait_ready()) return 1; /* OK */
|
|
||||||
deselect();
|
|
||||||
return 0; /* Timeout */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Receive a data packet from MMC */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
int rcvr_datablock ( /* 1:OK, 0:Failed */
|
|
||||||
BYTE *buff, /* Data buffer to store received data */
|
|
||||||
UINT btr /* Byte count (must be multiple of 4) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BYTE token;
|
|
||||||
ULONG timeOutTime;
|
|
||||||
|
|
||||||
/* set timeout for 100 ms from now */
|
|
||||||
timeOutTime = TimerGet() + 100;
|
|
||||||
|
|
||||||
do { /* Wait for data packet in timeout of 100ms */
|
|
||||||
token = xchg_spi(0xFF);
|
|
||||||
} while ((token == 0xFF) && (TimerGet() < timeOutTime));
|
|
||||||
|
|
||||||
if(token != 0xFE) return 0; /* If not valid data token, retutn with error */
|
|
||||||
|
|
||||||
do { /* Receive the data block into buffer */
|
|
||||||
rcvr_spi_m(buff++);
|
|
||||||
rcvr_spi_m(buff++);
|
|
||||||
} while (btr -= 2);
|
|
||||||
xchg_spi(0xFF); /* Discard CRC */
|
|
||||||
xchg_spi(0xFF);
|
|
||||||
|
|
||||||
return 1; /* Return with success */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Send a data packet to MMC */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#if _USE_WRITE
|
|
||||||
static
|
|
||||||
int xmit_datablock ( /* 1:OK, 0:Failed */
|
|
||||||
const BYTE *buff, /* 512 byte data block to be transmitted */
|
|
||||||
BYTE token /* Data token */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BYTE resp;
|
|
||||||
UINT wc;
|
|
||||||
|
|
||||||
|
|
||||||
if (!wait_ready()) return 0;
|
|
||||||
|
|
||||||
xchg_spi(token); /* Xmit a token */
|
|
||||||
if (token != 0xFD) { /* Not StopTran token */
|
|
||||||
wc = 512;
|
|
||||||
do { /* Xmit the 512 byte data block to MMC */
|
|
||||||
xchg_spi(*buff++);
|
|
||||||
xchg_spi(*buff++);
|
|
||||||
} while (wc -= 2);
|
|
||||||
xchg_spi(0xFF); /* CRC (Dummy) */
|
|
||||||
xchg_spi(0xFF);
|
|
||||||
resp = xchg_spi(0xFF); /* Receive a data response */
|
|
||||||
if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Send a command packet to MMC */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static
|
|
||||||
BYTE send_cmd (
|
|
||||||
BYTE cmd, /* Command byte */
|
|
||||||
DWORD arg /* Argument */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BYTE n, res;
|
|
||||||
|
|
||||||
|
|
||||||
if (cmd & 0x80) { /* ACMD<n> is the command sequense of CMD55-CMD<n> */
|
|
||||||
cmd &= 0x7F;
|
|
||||||
res = send_cmd(CMD55, 0);
|
|
||||||
if (res > 1) return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Select the card and wait for ready */
|
|
||||||
deselect();
|
|
||||||
if (!select()) return 0xFF;
|
|
||||||
|
|
||||||
/* Send command packet */
|
|
||||||
xchg_spi(0x40 | cmd); /* Start + Command index */
|
|
||||||
xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */
|
|
||||||
xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */
|
|
||||||
xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */
|
|
||||||
xchg_spi((BYTE)arg); /* Argument[7..0] */
|
|
||||||
n = 0x01; /* Dummy CRC + Stop */
|
|
||||||
if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) + Stop */
|
|
||||||
if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) + Stop */
|
|
||||||
xchg_spi(n);
|
|
||||||
|
|
||||||
/* Receive command response */
|
|
||||||
if (cmd == CMD12) xchg_spi(0xFF); /* Skip a stuff byte on stop to read */
|
|
||||||
n = 10; /* Wait for a valid response in timeout of 10 attempts */
|
|
||||||
do
|
|
||||||
res = xchg_spi(0xFF);
|
|
||||||
while ((res & 0x80) && --n);
|
|
||||||
|
|
||||||
return res; /* Return with the response value */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Public Functions
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Initialize Disk Drive */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
DSTATUS disk_initialize (
|
|
||||||
BYTE pdrv /* Physical drive nmuber (0) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BYTE n, cmd, ty, ocr[4];
|
|
||||||
ULONG timeOutTime;
|
|
||||||
|
|
||||||
|
|
||||||
if (pdrv) return STA_NOINIT; /* Supports only single drive */
|
|
||||||
if (Stat & STA_NODISK) return Stat; /* No card in the socket */
|
|
||||||
|
|
||||||
power_on(); /* Force socket power on */
|
|
||||||
|
|
||||||
CS_LOW(); /* CS = L */
|
|
||||||
|
|
||||||
ty = 0;
|
|
||||||
if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */
|
|
||||||
timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */
|
|
||||||
|
|
||||||
if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
|
|
||||||
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */
|
|
||||||
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
|
|
||||||
while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle state (ACMD41 with HCS bit) */
|
|
||||||
if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
|
||||||
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
|
||||||
ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else { /* SDv1 or MMCv3 */
|
|
||||||
if (send_cmd(ACMD41, 0) <= 1) {
|
|
||||||
ty = CT_SD1; cmd = ACMD41; /* SDv1 */
|
|
||||||
} else {
|
|
||||||
ty = CT_MMC; cmd = CMD1; /* MMCv3 */
|
|
||||||
}
|
|
||||||
while ((TimerGet() < timeOutTime) && send_cmd(cmd, 0)); /* Wait for leaving idle state */
|
|
||||||
if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to 512 */
|
|
||||||
ty = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CardType = ty;
|
|
||||||
deselect();
|
|
||||||
|
|
||||||
if (ty) { /* Initialization succeded */
|
|
||||||
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
|
|
||||||
FCLK_FAST();
|
|
||||||
} else { /* Initialization failed */
|
|
||||||
power_off();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Stat;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Get Disk Status */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
DSTATUS disk_status (
|
|
||||||
BYTE pdrv /* Physical drive nmuber (0) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (pdrv) return STA_NOINIT; /* Supports only single drive */
|
|
||||||
return Stat;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Read Sector(s) */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
DRESULT disk_read (
|
|
||||||
BYTE pdrv, /* Physical drive number (0) */
|
|
||||||
BYTE *buff, /* Pointer to the data buffer to store read data */
|
|
||||||
DWORD sector, /* Start sector number (LBA) */
|
|
||||||
BYTE count /* Sector count (1..255) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (pdrv || !count) return RES_PARERR;
|
|
||||||
if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
||||||
|
|
||||||
if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
|
|
||||||
|
|
||||||
if (count == 1) { /* Single block read */
|
|
||||||
if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
|
|
||||||
&& rcvr_datablock(buff, 512))
|
|
||||||
count = 0;
|
|
||||||
}
|
|
||||||
else { /* Multiple block read */
|
|
||||||
if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */
|
|
||||||
do {
|
|
||||||
if (!rcvr_datablock(buff, 512)) break;
|
|
||||||
buff += 512;
|
|
||||||
} while (--count);
|
|
||||||
send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deselect();
|
|
||||||
|
|
||||||
return count ? RES_ERROR : RES_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Write Sector(s) */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#if _USE_WRITE
|
|
||||||
DRESULT disk_write (
|
|
||||||
BYTE pdrv, /* Physical drive nmuber (0) */
|
|
||||||
const BYTE *buff, /* Pointer to the data to be written */
|
|
||||||
DWORD sector, /* Start sector number (LBA) */
|
|
||||||
BYTE count /* Sector count (1..255) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (pdrv || !count) return RES_PARERR;
|
|
||||||
if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
||||||
if (Stat & STA_PROTECT) return RES_WRPRT;
|
|
||||||
|
|
||||||
if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
|
|
||||||
|
|
||||||
if (count == 1) { /* Single block write */
|
|
||||||
if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
|
|
||||||
&& xmit_datablock(buff, 0xFE))
|
|
||||||
count = 0;
|
|
||||||
}
|
|
||||||
else { /* Multiple block write */
|
|
||||||
if (CardType & CT_SDC) send_cmd(ACMD23, count);
|
|
||||||
if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
|
|
||||||
do {
|
|
||||||
if (!xmit_datablock(buff, 0xFC)) break;
|
|
||||||
buff += 512;
|
|
||||||
} while (--count);
|
|
||||||
if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */
|
|
||||||
count = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deselect();
|
|
||||||
|
|
||||||
return count ? RES_ERROR : RES_OK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
/* Miscellaneous Functions */
|
|
||||||
/*-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#if _USE_IOCTL
|
|
||||||
DRESULT disk_ioctl (
|
|
||||||
BYTE pdrv, /* Physical drive nmuber (0) */
|
|
||||||
BYTE cmd, /* Control code */
|
|
||||||
void *buff /* Buffer to send/receive data block */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
DRESULT res;
|
|
||||||
BYTE n, csd[16], *ptr = buff;
|
|
||||||
DWORD csz;
|
|
||||||
|
|
||||||
|
|
||||||
if (pdrv) return RES_PARERR;
|
|
||||||
if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
||||||
|
|
||||||
res = RES_ERROR;
|
|
||||||
switch (cmd) {
|
|
||||||
case CTRL_SYNC : /* Flush write-back cache, Wait for end of internal process */
|
|
||||||
if (select()) res = RES_OK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GET_SECTOR_COUNT : /* Get number of sectors on the disk (WORD) */
|
|
||||||
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
|
|
||||||
if ((csd[0] >> 6) == 1) { /* SDv2? */
|
|
||||||
csz = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1;
|
|
||||||
*(DWORD*)buff = csz << 10;
|
|
||||||
} else { /* SDv1 or MMCv3 */
|
|
||||||
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
|
|
||||||
csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
|
|
||||||
*(DWORD*)buff = csz << (n - 9);
|
|
||||||
}
|
|
||||||
res = RES_OK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GET_BLOCK_SIZE : /* Get erase block size in unit of sectors (DWORD) */
|
|
||||||
if (CardType & CT_SD2) { /* SDv2? */
|
|
||||||
if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
|
|
||||||
xchg_spi(0xFF);
|
|
||||||
if (rcvr_datablock(csd, 16)) { /* Read partial block */
|
|
||||||
for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
|
|
||||||
*(DWORD*)buff = 16UL << (csd[10] >> 4);
|
|
||||||
res = RES_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else { /* SDv1 or MMCv3 */
|
|
||||||
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
|
|
||||||
if (CardType & CT_SD1) { /* SDv1 */
|
|
||||||
*(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1);
|
|
||||||
} else { /* MMCv3 */
|
|
||||||
*(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1);
|
|
||||||
}
|
|
||||||
res = RES_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MMC_GET_TYPE : /* Get card type flags (1 byte) */
|
|
||||||
*ptr = CardType;
|
|
||||||
res = RES_OK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */
|
|
||||||
if ((send_cmd(CMD9, 0) == 0) /* READ_CSD */
|
|
||||||
&& rcvr_datablock(buff, 16))
|
|
||||||
res = RES_OK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */
|
|
||||||
if ((send_cmd(CMD10, 0) == 0) /* READ_CID */
|
|
||||||
&& rcvr_datablock(buff, 16))
|
|
||||||
res = RES_OK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */
|
|
||||||
if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
|
|
||||||
for (n = 0; n < 4; n++)
|
|
||||||
*((BYTE*)buff+n) = xchg_spi(0xFF);
|
|
||||||
res = RES_OK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MMC_GET_SDSTAT : /* Receive SD status as a data block (64 bytes) */
|
|
||||||
if ((CardType & CT_SD2) && send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
|
|
||||||
xchg_spi(0xFF);
|
|
||||||
if (rcvr_datablock(buff, 64))
|
|
||||||
res = RES_OK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
res = RES_PARERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
deselect();
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------*/
|
|
||||||
/* User Provided Timer Function for FatFs module */
|
|
||||||
/*---------------------------------------------------------*/
|
|
||||||
/* This is a real time clock service to be called from */
|
|
||||||
/* FatFs module. Any valid time must be returned even if */
|
|
||||||
/* the system does not support a real time clock. */
|
|
||||||
/* This is not required in read-only configuration. */
|
|
||||||
|
|
||||||
DWORD get_fattime (void)
|
|
||||||
{
|
|
||||||
/* No RTC supprt. Return a fixed value 2013/5/10 0:00:00 */
|
|
||||||
return ((DWORD)(2013 - 1980) << 25) /* Y */
|
|
||||||
| ((DWORD)5 << 21) /* M */
|
|
||||||
| ((DWORD)10 << 16) /* D */
|
|
||||||
| ((DWORD)0 << 11) /* H */
|
|
||||||
| ((DWORD)0 << 5) /* M */
|
|
||||||
| ((DWORD)0 >> 1); /* S */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,6 @@ PROJ_FILES= \
|
||||||
blt_conf.h \
|
blt_conf.h \
|
||||||
hooks.c \
|
hooks.c \
|
||||||
main.c \
|
main.c \
|
||||||
./lib/fatfs/ffconf.h \
|
|
||||||
./lib/fatfs/mmc.c \
|
|
||||||
./lib/CMSIS/CM3/CoreSupport/core_cm3.c \
|
./lib/CMSIS/CM3/CoreSupport/core_cm3.c \
|
||||||
./lib/CMSIS/CM3/CoreSupport/core_cm3.h \
|
./lib/CMSIS/CM3/CoreSupport/core_cm3.h \
|
||||||
./lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
|
./lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
|
||||||
|
@ -54,11 +52,6 @@ main.c \
|
||||||
./lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c \
|
./lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c \
|
||||||
./lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c \
|
./lib/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c \
|
||||||
./lib/STM32F10x_StdPeriph_Driver/stm32f10x_conf.h \
|
./lib/STM32F10x_StdPeriph_Driver/stm32f10x_conf.h \
|
||||||
../../../Source/third_party/fatfs/src/diskio.h \
|
|
||||||
../../../Source/third_party/fatfs/src/ff.c \
|
|
||||||
../../../Source/third_party/fatfs/src/ff.h \
|
|
||||||
../../../Source/third_party/fatfs/src/integer.h \
|
|
||||||
../../../Source/third_party/fatfs/src/option/unicode.c \
|
|
||||||
../../../Source/boot.c \
|
../../../Source/boot.c \
|
||||||
../../../Source/boot.h \
|
../../../Source/boot.h \
|
||||||
../../../Source/com.c \
|
../../../Source/com.c \
|
||||||
|
|
Loading…
Reference in New Issue