áá
ášáœáá ááá°á á¥á ášáášášá» ááá áá ášáá á«áµá ááá³á á áµá«áá®áœ áµáá ááᢠá ááµ ášá¥á« á£áá°ášá£á¬ á á
áá¡ ááµáªá®áµ (Aigo) SK8671 áááµ áµá«áá á¥áá³áá£áá ááµá³ááµá
ᣠá¥á á¥á±á ááááá áµ áá°áá©áᣠá¥á á áá ášá¥á± ášáá£áá á¥á«áá«á ááᢠá°ášá᪠ášááá á¥á á ááµ ááá á¥áá á¥ááá á ááá
4. ášááµá£áá áš PSoC ááᜠá ááá áá»á» ááá°áµ á¥áááá«áá
áµááá ᣠááá ááá ášáá«áááá°á (á [ášááááªá«á ááá] () ááµá¥ á¥áá³ááááá ášáá á®áµ á PSoC á¥ááá³ á¥áááµ ááµá¥ áááá¡á ááᢠáµááá , á¥ááá á ášááᜠá¥ááá¶áœá ááá ᥠá áá¥á. á áµááá á¥á« ááµ;
- ášáááá® ááá£á áªá«á áá "áááááµá" ááá£á á©;
- áá "áááááµ" ášáá ášááá ᥠášá°á á á áááá ááášááᥠááááµ áááá;
- á¥á ááá áááá ááááµ áááá á¢
ášáá°á« ášáá á®áµ áááá á áá ášáááá£ážá áááµ áŠá³áᜠá áá¢
- ášááµá¥ á¥ááá³ áá á°áš áµááµá³;
- SRAMᣠáá á®áµ á á°á ááá ášáá£á áá ââá®áµ áá áááááá ášáááá¥á áµá¢
áá° ááµ áµááášáµá£ á ááá áš ISSP áá®á¶á®áá á°ááµ á áᣠáœáá³áᜠášááá á¥á© á áá ášááµá£ááá ášPSoC ááᜠá ááá - ášá°á áááµ áµááá±á âáááá á¡áµ áášá³á°á«â á á°á£á ášáááµáá á¥ááµ á áá áá áááá á¥áá°á»áá© á áµá°áá«ááᢠáá á áµáááááá áá á®áµ á áá¥á³ á¥ááµá¥á á áµáœáááá¢
$ ./psoc.py
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9
ášáášášá» áá®áá«á á®áµ:
5. ISSP áá®á¶á®á
5.1. ISSP áááµá áá?
ášáááá® ááá£á áªá« áá á«áá "áááááµ" ášá°áá«á© ááá®áœá áá«ááááµ ááœááá¡ áš"á»á áá° á»á" á°ášá³á³á áá®á¶á®á á áá áá ááµá°áá¥á (ááá³á ICSP á Microchip's PIC)á¢
á³ááášáµ ááá
ášá«á± ášáá ášá£áá€áµááµ áá®á¶á®á á ááᣠISSP (in-system serial programming protocol) á°á¥á ášáá á« á²áá á¥á±á á ášáá á ááµá¥ á°ááá¿á
- PSoC á³áá á áµáá³;
- ášá áµááµ áá¥á©á áá° ášáá PSoC á°ášá³á³á á³á³ áá ááá£áµ; áá° áá«á ášáá®áá«á ááá³ áááá£áµ;
- áµááááœá áá᩠ᣠá¥áá±á âvectorsâ ášáá£á ášá¥á á¢áµ áá¥ášááááᜠáážáá¢
ášISSP á°ááµ á¥ááá á á¬áá°á®áœ ášááááá áá¥ááµ á¥áá áµáááᜠá¥á» ááá¡-
- ááµááá-1
- ááµááá-2
- ááµááá-3 (3V á¥á 5V á áá«á®áœ)
- áá³ááá«-áááá
- á áá¥á¥-áá³ááá«-áá
- á ááá -á ááµ-áá¥áá¡ 10011111010dddddddd111ᣠášáµ dddddddd=áááµ #
- á á áá áá°áá°áµ
- áá®áá«á-á ááµ
- á ášááá¥-áááá
- á áá¥á¥-á£ááŽá¡ 10110aaaaaaZDDDDDDDDZ1ᣠDDDDDDDD = ááᥠášáá£á áµá£ aaaaa = á áµá«á» (6 á¢áµ)
- WRITE-BYTEá¡ 10010aaaaaaddddddd111ᣠdddddddd = ááᥠá áá£á áµá£ aaaaa = á áµá«á» (6 á¢áµ)
- á áµá°ááá
- áŒáá°á-áááá
- áá£á¥-áŒáá°áá¡ 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1ᣠášáµ DDDDDDDDDDDDDDDD = ááᥠášáá£á áµá¡ ášáá£áªá« áŒáá°á
- á ááµ á á¥á
ááá³áᣠá¬áá°á á Initialize-2á¡-
1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111
ááá á¬áá°á®áœ á ááµ á áááµ ááááµ á áážá: 22 á¢áµ. ášHSSP á°ááµ á ISSP áá á áá³ááµ á°ášá᪠áášááᜠá ááµá¡ "ášISSP á¬áá°á ášáááªá«ááœá áµá¥áµá¥ ášáááá ášáµáᜠá á°á á°ášá°á ášááá á áá°ááá¢"
5.2. á¬áá°á®áœá áá¥ááµ
á¥áá áá á¥ášá°á«áá° á¥áá³á á¥ááá ᢠááááªá« ááᣠá¥ááá á¬áá°á®áœ ášM8C áááªá«áᜠá¥á¬ áµáªá¶áœ áážá á¥á¬ á áµá€ áá áᣠááá áá áá á ááááµ á«ášááá¥á© á ááᣠášáŠáá¬áœáá¹ áŠáá®áµ á¥áá°áááááµ á°ášá³áá¢
ášá á áá á«ááá á¬áá°á ááá á áµáá á ááááµ
ášá ášá±áááªá¥á ROM (SROM) ááá á áá³ááµ á á£á á áá áášáááœá áá°á¥á°á¥ á»áá©á¢
- 00 á°: SWBoot á³áá ááµááá
- 01 á°: ReadBlock
- 02 á°: á»á á¥áá
- 03 á°á¡ á ááµ á á¥á
- 06 á°ááµá¡ á ášáŽá á áá¥á¥
- 07 á°: CheckSum
- 08 á°á¡ áá¬áµ 0
- 09 á°á¡ áá¬áµ 1
ášá¬áá°á áµááœá ášSROM á°áá£á«áµ áá á ááááá á áá áá®á¶á®á ášáá°áááµá ášá°áá«á© áµá«áᜠášáá á áá ášSROM áááªá«áᜠáá ááááµ á¥ááœáááᢠááá á ááµáá ááá£áá ášááááªá«áá¹á á¶áµáµ ášISSP á¬áá°á®áœ ááá³áµ á¥ááœáááá¡-
- 100 => "wrem"
- 101 => "rdmem"
- 110 => "áµá á°áµ"
- 111 => "áá"
ááá ááᣠáµá áºá áá°á¶áœ ášá°áá áááဠááá ášááœáá ášPSoC áá á áá¥á³ á áááááµ á¥á» ááá¢
5.3. ášPSoC áá áááááµ
Dirk Petrautsky á áµááµá á áá ááá®
á¥á£ááá á á¥áᎠáá°áµ ášá²ááá á®áµ á á¥áá± ááá¬á«ááᢠáá»á»á«á¬á á GitHub áá ááááµ áµáœááá
á¡-
áµááá ᣠá áá±áªáá á áá ááᣠááááªá« ášá°á ááá©áµ âáŠááŽááâ á¬áá°á®áœá á âáááááµâ á¥á» ááᢠášVERIFY áµáááá á°á á á ááµá£ááá ROM áááá ᥠáášáá©. á¥áá°á°á á áá, áá á ááµášá á áá»áá©á. áááá£áµ á ááᜠá áááá ááµá¥ ášáá£á¥ áášáášá« á¢áµ áµááááá ááá ááœááá¢
ášáá«á á¥ááµ ášá«áŽá ááá á¬áá°á®áœ ááá»á á¥á áááá ᥠáá á°áš áµááµá³ / ááááá¢á«ááœá áá áá©. á¥á£ááá ááᜠá áááá ášá°á á á á¢ááá áááá SROM ááá ᥠá¥áá°áááœá á áµá°áá!
5.4. á áºá áá á«á ááááŠáœá ááášáµ
"ášá°á á³á°á" á¬áá°á®áœá ášá°ááášáµá© á áá áá³áªá«á á¥á ááá á ááá á áá¥á³ ášááážá ášM0C áŠáá®á¶áœá áááášáµ á°ááµ á áᣠááááŠáœá (8xF0-8xFA) á¥áá°áá áá á°ášáµá»ááᢠáá á¥áá° âADDâᣠâMOV AᣠXâᣠâPUSHâ ááá âJMPâ á«á ášá°áá«á© áŠáá®á¶áœá á¥áá³ááµ á áµáœáááᢠáá¥áá± ááµáá ááá£á (á ááááŠáœ áá ášáá«áµášáµááµá ášááá®áœ áá³á¶áœ á áááášáµ) ášá°ááµ á áᣠááááŠáœ ááµá¥ ášáµáá¹ áá°á á áááá£áᜠ(ဠᣠá€áᵠᣠSP á¥á áá²) á¥áá°áá áááá áœá«ááá¢
á áá€á±áᣠá HSSP_disas.rb áá³áªá« ášá°áá ášá "ášá°á á³á°á" á®áµ áá á áááµáá (ááááœááµ á áµá°á«ášá¶áœá ášáá¬á«áá)
--== init2 ==--
[DE E0 1C] wrreg CPU_F (f7), 0x00 # ÑбÑÐŸÑ ÑлагПв
[DE C0 1C] wrreg SP (f6), 0x00 # ÑбÑÐŸÑ SP
[9F 07 5C] wrmem KEY1, 0x3A # ПбÑзаÑелÑÐœÑй аÑгÑÐŒÐµÐœÑ ÐŽÐ»Ñ SSC
[9F 20 7C] wrmem KEY2, 0x03 # аМалПгОÑМП
[DE A0 1C] wrreg PCh (f5), 0x00 # ÑбÑÐŸÑ PC (MSB) ...
[DE 80 7C] wrreg PCl (f4), 0x03 # (LSB) ... ЎП 3 ??
[9F 70 1C] wrmem POINTER, 0x80 # RAM-ÑказаÑÐµÐ»Ñ ÐŽÐ»Ñ Ð²ÑÑ
ПЎМÑÑ
ЎаММÑÑ
[DF 26 1C] wrreg opc1 (f9), 0x30 # ÐпкПЎ 1 => "HALT"
[DF 48 1C] wrreg opc2 (fa), 0x40 # ÐпкПЎ 2 => "NOP"
[9F 40 3C] wrmem BLOCKID, 0x01 # BLOCK ID ÐŽÐ»Ñ Ð²ÑзПва SSC
[DE 00 DC] wrreg A (f0), 0x06 # ÐœÐŸÐŒÐµÑ "Syscall" : TableRead
[DF 00 1C] wrreg opc0 (f8), 0x00 # ÐпкПЎ ÐŽÐ»Ñ SSC, "Supervisory SROM Call"
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12 # ÐеЎПкÑЌЌеМÑОÑÐŸÐ²Ð°ÐœÐœÐ°Ñ ÐŸÐ¿ÐµÑаÑОÑ: вÑпПлМОÑÑ Ð²ÐœÐµÑМОй ПпкПЎ
5.5. ášá°á áááµ á¢áµ
á áá á°ášá ááµááá áš PSoC áá áááááµ á¥áœááá ᣠáá á ááá áµá ááᜠá áááá ášá°á áááµ á¢áµ á áµá°ááá áášá ášáááᢠá³ááášáµ ááá£áªá«á á°á áá ááá á áááµ áášáášá« á áááá©á ááášááᥠá£ááá»á á á£á á áµáááááᢠDirk áá»á»á«áá ášááá á áá á á³ááášáµ ášáášá á HSSP á®áµ á¥áá°á°á»á»á ááášá³áµ áááá á á¥áááµ ááá¬á«ááᢠá¥áá! áá á á²áµ á¬áá°á á³áá·áá¡-
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[9F A0 1C] wrmem 0xFD, 0x00 # МеОзвеÑÑÐœÑе аÑгÑЌеМÑÑ
[9F E0 1C] wrmem 0xFF, 0x00 # аМалПгОÑМП
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 02 1C] wrreg A (f0), 0x10 # МеЎПкÑЌеМÑОÑПваММÑй syscall !
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
áá áá á¬áá°á á áá áá (áá£á¥_á°á áááµ_á³á³ á psoc.py áááášá±) áááá ášá°á áááµ á¢áµ á SRAM 0x80 áá á¥áááááá£á á°ášáášá á¥áá áááµ á¢áµ á²ááá¢
áá€á± á°áµá á áµáá«á áá: ááá ááá á "áá«á áá£á¥ á¥á áá»á á á°ááá" ááá³ ááµá¥ ášá°á á á áá. áµááá , ášááᜠá ááá ááá ááá ááá ᥠá ááá»á á¥á» á³ááá ááá ááá áá»á á ááœáá (ááá³á, á¥áá« áš ROM dumper ááá«á). á¥á áášáášá«áá ááá°áášá á¥ážáá ááááµ áááá áºá áá á áá áá¥ááµ áá. ð
6. ááááªá« (á«áá°á³á«) á¥ááµ: ROMX
áááᣠášáášá°ááá á¥áááµ ááášá á¥ááœáááá¡ ášáááá° áŠáá®á¶áœá ášááµááá á á á áµááá ááᜠáá á°áš áµááµá³á áááá ᥠášáá«áááá ROMX ááá á áá°á«á? áá á á«ááµ á¥á© ášáµá¬áµ á¥áµá á ááᢠáááá«á±á ášSROM ášá°áá áášáá ášáá«áᥠášReadBlock á°áá£á (á á¬áá°á®áœ á¥á á áá ášáááá) ášISSP áá¥á«á±á á«ášááá£áᢠááá ááᣠᚠROMX áŠáá®áµ á á áµá°á³á°á¥ ááá³ á¥áá°áá á áááµ áŒá áááášá ááœááᢠáµááá ášáááá á®áµ áážáá (á¥ááµ á áᥠááááœá áá° Arduino á®áµ á«ášáá á áá)
for i in range(0, 8192):
write_reg(0xF0, i>>8) # A = 0
write_reg(0xF3, i&0xFF) # X = 0
exec_opcodes("x28x30x40") # ROMX, HALT, NOP
byte = read_reg(0xF0) # ROMX reads ROM[A|X] into A
print "%02x" % ord(byte[0]) # print ROM byte
á¥áá° á ááá³á°á áá áá á®áµ á áá°á«áᢠð ááá áááááµ áá°á«á ááá áá á áá€á± áá ášá«á³áœáá áŠáá®áµ (0x28 0x30 0x40) á¥ááááá! ášáá³áªá«á á°áá³á á°áá£á ášáá£á¥ á¥á á á á«á áá á¥á¬ á áááá. áá áá á¥áá° á¢ááááªáá á¥áááµ ááá¡ áá«á áŠáá®á¶áœá á²á°á« ášROM á áá¶á¥áµ áá° ááá«á ááµ ááááá«áá¢
7. ááá°á á¥ááµ: áááá á¡áµ áášá³á°á
áš ROMX á¥áááµ áµááá°á« ᣠáµá áá ášáá
á¥áááµ áá©ááµ áá°á¥ áááá© - á á
áµáá± ááµá¥ á°ááá¿á
7.1. áá°áá á
ášISSP á°ááµ áCHECKSUM-SETUP ášáášá°ááá á¬áá°á á«ááá£áá¡-
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[9F 40 1C] wrmem BLOCKID, 0x00
[DE 00 FC] wrreg A (f0), 0x07
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
áá á áá ášá± ášSROM á°áá£áá 0x07 ááááᣠá á°áá± áá á¥áá°á°ááážá (á¢á«áááµ ášá¥áá¡)
áá á°áá£á ášáá°á» ááá« áášááá«á¢ á á ááµ ááᜠá£áá ááµá¥ á á°á áá ášá°ááá¹ á¥áá®áœ á¥ááµ ášáá® ááá® á£á 16-á¢áµ áŒá áá°ááᢠᚠBLOCKID áááªá« ášáŒá áµááá á²á«á°á á¥á á áá ášááááµá á¥áá®áœ áá¥á áááá áá á ááᢠáš"1" á¥áŽáµ áá®á ášááá áŒá á¥á» á«á°ááᢠá¢ááá "0" ášááᜠá£áá á á ááá 256 á¥áá®áœ á¥áá²á°á á«á°ááááᢠá£á 16-á¢áµ áŒá á KEY1 á¥á KEY2 á á©á áááá³áᢠášKEY1 áá€áµ áá á°á-áµááá 8 á¢áµ ášáŒáá±á á«ášáá»áᣠá¥á ášKEY2 áááªá« ášáá°á-áµáááá 8 á¢áµ á«ášáá»áᢠá¥á ááᜠá£áá®áœ ááážá áá³áªá«áᜠášáŒáá°á á°áá£á áá¥á«áá³áá± á á°áá á áá á«áᢠášáá á«á áµ ášá£áá áá¥á á FLS_PR1 áááᥠá°ááá¥á¯á (á ááµá¡ á«ááá á¢áµ ášá³ááá ááᜠá£áá áá á ááááµ)á¢
áá ááá ášáá°á» áá á áááá áᥠáá á: á£ááµ á ááá á ááµ á á ááµ áášáá«á; ááá ášáᥠCRC quirks. á á°ášááªá ᣠM8C á®á á á£á áµáᜠášááááá¢á« áµá¥áµá¥ á¥áá³áá á ááá ᣠáŒá©á á²á«á°á áá«ášáá áááᜠá á°áá³á³á á°áááá®áœ ááááá£á ᣠá áášášá»á áá° áá€á± ááá³á-KEY1 (0xF8) / KEY2 ( 0xF9)
áµááá á ááµá áá³á¥ ášá¥á á¥ááµ áá á áááµááá¢
- á ISSP á á©á á¥ááááááá¢
- ášáŒá áµáá±á á CHECKSUM-SETUP á¬áá°á á áá áá á¥áááá«áá.
- áá®á°á°á©á ášá°áá°á áá á áá á¥áá°áá á¥ááµáá³áááá¢
- ášá ááá áŒáá°á á² áááááµ á«á á¥ááá£ááá¢
- á¥áááááœá 3 á¥á 4 ááµáá, T á á¥á«áá³áá± áá áµáᜠáášáá©.
- ášááᜠá ááá áášáá á¥ááµááá³áá ášáá°ááá áŒáá°á C á áá á«áá á ááááµá¢
ááá ááᣠá ááµ áœáá á áá¡ á³áá ášáááá á áá ááá á«áá¥á ášInitialize-1 á¬áá°á KEY1 á¥á KEY2á áá°á«áá¢
1100101000000000000000 # ÐагОÑ, пеÑевПЎÑÑÐ°Ñ PSoC в ÑежОЌ пÑПгÑаЌЌОÑПваМОÑ
nop
nop
nop
nop
nop
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A # кПМÑÑПлÑÐœÐ°Ñ ÑÑЌЌа пеÑезапОÑÑваеÑÑÑ Ð·ÐŽÐµÑÑ
[9F 20 7C] wrmem KEY2, 0x03 # О зЎеÑÑ
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 01 3C] wrreg A (f0), 0x09 # SROM-ÑÑМкÑÐžÑ 9
[DF 00 1C] wrreg opc0 (f8), 0x00 # SSC
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
áá á®áµ áá° Calibrate1 (SROM á°áá£á 9) á áá°áá ááµ ášáááá áŒá á±ááœáá áá°á«áá... áááá£áµ ášáá®áá«ááá ááµ áááá£áµ ášá áµááµ áá¥á©á (ášáá á«áá á®áµ ááááªá« ááá®) ááá á¥ááœááá á¥á ášáá« SRAM á á¥ááá£áá? á¥á á á, áá°á«á! áá áá á¥ááµ ášáá°áá ášá áš Arduino á®áµ á á£á ááá ááá¡-
case Cmnd_STK_START_CSUM:
checksum_delay = ((uint32_t)getch())<<24;
checksum_delay |= ((uint32_t)getch())<<16;
checksum_delay |= ((uint32_t)getch())<<8;
checksum_delay |= getch();
if(checksum_delay > 10000) {
ms_delay = checksum_delay/1000;
checksum_delay = checksum_delay%1000;
}
else {
ms_delay = 0;
}
send_checksum_v();
if(checksum_delay)
delayMicroseconds(checksum_delay);
delay(ms_delay);
start_pmode();
- checkum_delay á áá¥á¥á¢
- ášáŒáá°á áµááµ (send_checksum_v) á«áá±á¢
- áá°áá°á áá áá á¥á; ášáášá°ááµá áá³á¶áœ áááµ ááµá¥ á ááµáá£áµ:
- ášááááá á¥áµá«áá
áµášáµ á¥á áá á á áá
ášáááá® á°ášááµ áááášáµ áš 16383 ÎŒs á«áá áá áááášá¶áœ á¥á» á áµááá áá°á«á; - á¥á áááᶠáááá® á°ášááµá£ 0 á¥áá° áá¥á áµ ášá°áááᣠáá á áá á áµá á°áµ á¥áá°áá°á« á¥áµá«ááá á© áµášáµ á«á á«á á áá ááµá«áá!
- ášááááá á¥áµá«áá
áµášáµ á¥á áá á á áá
- PSoC á áá° áá®áá«ááá ááá³ á¥áá°áá á«áµáá± (ášááµáááªá« á¬áá°á®áœá á³ááá ášá áµááµ áá¥á©á á¥á» á¥ááá«ááá¢
ášáášášá» á®áµ á Python ááµá¥á¡-
for delay in range(0, 150000): # заЎеÑжка в ЌОкÑПÑекÑМЎаÑ
for i in range(0, 10): # кПлОÑеÑÑвП ÑÑОÑÑÐ²Ð°ÐœÐžÑ ÐŽÐ»Ñ ÐºÐ°Ð¶ÐŽÐŸÐ¹ÐžÐ· заЎеÑжек
try:
reset_psoc(quiet=True) # пеÑезагÑÑзка О вÑ
ПЎ в ÑежОЌ пÑПгÑаЌЌОÑПваМОÑ
send_vectors() # ПÑпÑавка ОМОÑОалОзОÑÑÑÑОÑ
векÑПÑПв
ser.write("x85"+struct.pack(">I", delay)) # вÑÑОÑлОÑÑ ÐºÐŸÐœÑÑПлÑÐœÑÑ ÑÑÐŒÐŒÑ + пеÑезагÑÑзОÑÑÑÑ Ð¿ÐŸÑле заЎеÑжкО
res = ser.read(1) # ÑÑОÑаÑÑ arduino ACK
except Exception as e:
print e
ser.close()
os.system("timeout -s KILL 1s picocom -b 115200 /dev/ttyACM0 2>&1 > /dev/null")
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=0.5) # ПÑкÑÑÑÑ Ð¿ÐŸÑлеЎПваÑелÑÐœÑй пПÑÑ
continue
print "%05d %02X %02X %02X" % (delay, # ÑÑОÑаÑÑ RAM-байÑÑ
read_regb(0xf1),
read_ramb(0xf8),
read_ramb(0xf9))
á£áá© áá á®áµ áá á«á°áááá¡-
- PSoC á á¥áá°áá á«áµáá³á (á¥á ášá áµááµ áá¥á ááá«á)á¢
- áá ááµáááªá« á¬áá°á®áœá ááá«áá¢
- áš Arduino á°áá£á Cmnd_STK_START_CSUM (0x85) áá°áááᣠá áááá® á°ášááµ áááášá± á¥áá° áá¬áµ á«áááá¢
- áŒáá±á (0xF8 á¥á 0xF9) á¥á á°ááµ á áá£áá 0xF1 á«áá£áá¢
áá á®áµ á 10 áááá® á°ášááµ 1 áá á°ááá ááááᢠ0xF1 á¥áá á°á«á·á áááá«á±á áŒá á²á°á ášá°ááá á á¥ážáá áááᥠááᢠáááá£áµ á á áªá²áá²á á áááá® ááá á¥á á áá ášááá ááá«á á°áááá ááááµ ááá ááœááᢠá áá±áªá ášá áááµ áááá¶áœá áá³ášá±á á²á«áá áá®á®áá á°á á á á áá±á¢áá á¥áá°áá áááµááá ášáá ááá áµá á áµáá«á á áá á áµá°áá (ááá á¥áá°áá á áá³áá á)á¢
7.2. áá€á±á á ááá á¥
áš Python áµááªááµ áá€áµ áá áá áááµáá (áááá ᥠááá)
DELAY F1 F8 F9 # F1 â вÑÑеÑпПЌÑÐœÑÑÑй МеОзвеÑÑÐœÑй ÑегОÑÑÑ
# F8 ЌлаЎÑОй Ð±Ð°Ð¹Ñ ÐºÐŸÐœÑÑПлÑМПй ÑÑЌЌÑ
# F9 ÑÑаÑÑОй Ð±Ð°Ð¹Ñ ÐºÐŸÐœÑÑПлÑМПй ÑÑЌЌÑ
00000 03 E1 19
[...]
00016 F9 00 03
00016 F9 00 00
00016 F9 00 03
00016 F9 00 03
00016 F9 00 03
00016 F9 00 00 # кПМÑÑПлÑÐœÐ°Ñ ÑÑЌЌа ÑбÑаÑÑваеÑÑÑ Ð² 0
00017 FB 00 00
[...]
00023 F8 00 00
00024 80 80 00 # 1-й байÑ: 0x0080-0x0000 = 0x80
00024 80 80 00
00024 80 80 00
[...]
00057 CC E7 00 # 2-й байÑ: 0xE7-0x80: 0x67
00057 CC E7 00
00057 01 17 01 # пПМÑÑÐžÑ ÐœÐµ ОЌеÑ, ÑÑП зЎеÑÑ Ð¿ÑПОÑÑ
ПЎОÑ
00057 01 17 01
00057 01 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 F8 E7 00 # СМПва E7?
00058 D0 17 01
[...]
00059 E7 E7 00
00060 17 17 00 # ХЌЌЌЌЌЌ
[...]
00062 00 17 00
00062 00 17 00
00063 01 17 01 # Ð, ЎПÑлП! ÐÐŸÑ ÐŸÐœ же пеÑÐµÐœÐŸÑ Ð² ÑÑаÑÑОй байÑ
00063 01 17 01
[...]
00075 CC 17 01 # ÐÑак, 0x117-0xE7: 0x30
áá á á°á£áá ááᣠáœáá á áá¥áá¡ ášááá á«á á áµáááá áŒáá°á áµáááᣠnull byte ášá°áá á áá áá á áááá ááᢠááá áá á á ááá ášáá³á¥ á á á«á© (8192 á£ááµ) 0,1478 á°ášááµ ášááá á ááá (á á¥á«áá³áá± áá á áµáᜠáá©áá¶áœ) ášáááá á á ááµ á£ááµ á áááµ 18,04 ÎŒs ááᣠá áá áá ášáŒáá°á ááá á á°áá¢á áá áášááᥠá¥ááœáááᢠáááááªá«áá¹ á©á«áᜠᣠášáá³á¥ á á á«á© ášáááá áµ áá áá áá á°áá³á³á áµááá ááá ááá á ááá ááá á£áᢠááá ááᣠá á¥á«áá³áá± á©á« áá á«ááµ âá¥áá á ášáá áá©áá¶áœâ á°á°áášá ááá áµáááá ášáá áá£á« áášášá» áµááá á áá°ááá¢
134023 D0 02 DD
134023 CC D2 DC
134023 CC D2 DC
134023 CC D2 DC
134023 FB D2 DC
134023 3F D2 DC
134023 CC D2 DC
134024 02 02 DC
134024 CC D2 DC
134024 F9 02 DC
134024 03 02 DD
134024 21 02 DD
134024 02 D2 DC
134024 02 02 DC
134024 02 02 DC
134024 F8 D2 DC
134024 F8 D2 DC
134025 CC D2 DC
134025 EF D2 DC
134025 21 02 DD
134025 F8 D2 DC
134025 21 02 DD
134025 CC D2 DC
134025 04 D2 DC
134025 FB D2 DC
134025 CC D2 DC
134025 FB 02 DD
134026 03 02 DD
134026 21 02 DD
áá áá¥á«áá³áá± áááá® á°ášááµ áááášáµ 10 áá»á»áᜠááᢠáááá 8192 á£ááµ ááᜠá ááá ááá£á á á ááá ášáµá« áá 48 á°á á³áµ á«á á ááá¢
7.3. á¥ááá³ áááµá®áœ á°ááµá¶
áááá ášáá áá©áá¶áœ áááµ ááµá¥ á ááµáá£áµ ášááᜠá ááááá ášáá®áá«á á®áµ áá á áá ášáááá£áá á®áµ ááá áá á áášášáµá©áᢠáááᣠášáá á á®áµ ááááªá« áá°á á¥á¬ áááŒáááᢠá áµááá á¥áá³á°ášá©áµ ááášááᥠm8cdis á áá áá áá³ááµá¡-
0000: 80 67 jmp 0068h ; Reset vector
[...]
0068: 71 10 or F,010h
006a: 62 e3 87 mov reg[VLT_CR],087h
006d: 70 ef and F,0efh
006f: 41 fe fb and reg[CPU_SCR1],0fbh
0072: 50 80 mov A,080h
0074: 4e swap A,SP
0075: 55 fa 01 mov [0fah],001h
0078: 4f mov X,SP
0079: 5b mov A,X
007a: 01 03 add A,003h
007c: 53 f9 mov [0f9h],A
007e: 55 f8 3a mov [0f8h],03ah
0081: 50 06 mov A,006h
0083: 00 ssc
[...]
0122: 18 pop A
0123: 71 10 or F,010h
0125: 43 e3 10 or reg[VLT_CR],010h
0128: 70 00 and F,000h ; Paging mode changed from 3 to 0
012a: ef 62 jacc 008dh
012c: e0 00 jacc 012dh
012e: 71 10 or F,010h
0130: 62 e0 02 mov reg[OSC_CR0],002h
0133: 70 ef and F,0efh
0135: 62 e2 00 mov reg[INT_VC],000h
0138: 7c 19 30 lcall 1930h
013b: 8f ff jmp 013bh
013d: 50 08 mov A,008h
013f: 7f ret
á á£á áááá«á³á áááµáá!
7.4. ášáá á®áµ áášáá» á áµá«á»á á ááááµ áá
á áá áŒáá±á á áááááá áµ áá ááá ᥠáµááááœáᣠá ááá°ááá áµ áá á¥ááŽáµ á¥á ášáµ á¥áá°ááášá á ááá áášááᥠá¥ááœáááá¡-
- ášá°á³á³á° áá á®áµ á«áµáá¡;
- ášáá á®áµ áááá¢
á ááááªá«á£ ááá³ááá ášáášáá» á áµá«á» áááááµá£ á³áá ášá°áá³ á áá á 10 áᎠáááªáᜠááµá¥ ášáŒá áááœáµ áá°áµá©á¢ ášáá« ášá°á³á³á° áá á áµáá£á á¥á á°áá³á³á ááá á á°ášááá¢
á¥á áááŠáœ áµááá á© áá€á± á á£á á áµá°á³áœ á ááá ášá. ááá áá á áášášá» áŒáá±á á 120000 ÎŒs á¥á 140000 µs áááášáµ áá«ášá á áá áŠá³ ááášá©á áááá áœá«ááᢠááá áá á¥áá« á«á³ášááµ "ááá®áµ" áá á áá áµááá á áá°áá - á áááášá± ášáááá® á°ášááµ á á°á«á áááá«áµ 0 á²á°ááá á¥ááá³ ááá®áœá á«á°áááá¢
ášáá«á áá° 3 á°á á³áµ á«á á á«á³ááá© á ááᣠášSROM á²áµá°á á¥áª CheckSum ááŒáá±á ášá¥áá®áœ á¥ááµ ášáááᜠáááá á¥áá° áá¥á áµ ááá áá á áµá³áá³áá! á«á¢ á¥áµáš 64-á£ááµ á¥áá á£áá áµááááááµ ášáá á®áµ áášáá» á áµá«á»á á¥á "ášá°á³á³á± áášá«ááœ" áá£áªá á ááá áá°ááá á¥ááœáááá¢
ášá¥á ášááááªá« á©á«áᜠášáášá°ááá áá€áµ á áµááá°ááá¡-
ášáá« áá á®á±á áš"123456" áá° "1234567" ááᬠá ááááµá¡-
áµááá áá á®áµ á¥á ášá°á³á³á± áášá«áᜠáá£áª á á¥áá áá¥á 126 ááµá¥ ášá°ášáá¹ áááµááá¢
7.5. áá¥á 126 ášáá»á» áá£á« ááá°áµ
á ááµ #126 á 125x64x18 = 144000ÎŒs á á«á£á¢ áááᥠá«áá áµ ášáŒáá°á áµááµ ááááªá« ááá® áá áá»á»á¬ ááµá¥ áá á¥á á á£á á á³áá áááµááᢠášáá«áᣠá¥á áá á«ááá ášáá»á» áá£á« áŠá³ááœá á á¥á á«á£á«á á áá (á âá¥áá á ášáá áá©ááµâ áááœáµ áááá«áµ) á¥ááá á á£ááµ á ááá (á 145527 ÎŒs áááášáµ)á¢
ášáá á®áµ á£áá°áá°á áš ááá© áááá¡ á á£á ááá áá! á¥ááá á¥áŽá¶áœ, á á¥ááá¥, á ASCII á®á¶áœ ááµá¥ á áá°á»áá, ááá áá á¥áá° á°ááá , áš capacitive ášááá á°áá³ ášá°áá°á±áµá áá£áŠáœ á«ááá£ááá.
á áášášá»á£ ášáá¥á áášá« áá£áªá ášáµ á¥áá°á°ááá áááá á áá³ááµ á°ášá᪠áášá«ááœá áášáá©á¢ áá€á± á¥ááá¡-
0xFF - áááµ "15 áášá«ááœ" á¥á á á¥á«áá³áá± á«áá°á³á« áášá« áááá³á.
7.6. ášáá á®áµ ááᶠááá
ášáá á«ááá á ááµ áá ášáá«á£áášá ášá¥á á áµáá«á á®áµ áážááá¡
def dump_pin():
pin_map = {0x24: "0", 0x25: "1", 0x26: "2", 0x27:"3", 0x20: "4", 0x21: "5",
0x22: "6", 0x23: "7", 0x2c: "8", 0x2d: "9"}
last_csum = 0
pin_bytes = []
for delay in range(145495, 145719, 16):
csum = csum_at(delay, 1)
byte = (csum-last_csum)&0xFF
print "%05d %04x (%04x) => %02x" % (delay, csum, last_csum, byte)
pin_bytes.append(byte)
last_csum = csum
print "PIN: ",
for i in range(0, len(pin_bytes)):
if pin_bytes[i] in pin_map:
print pin_map[pin_bytes[i]],
print
ášá áááá áá€áµ ášáášá°áá ááá¢
$ ./psoc.py
syncing: KO OK
Resetting PSoC: KO Resetting PSoC: KO Resetting PSoC: OK
145495 53e2 (0000) => e2
145511 5407 (53e2) => 25
145527 542d (5407) => 26
145543 5454 (542d) => 27
145559 5474 (5454) => 20
145575 5495 (5474) => 21
145591 54b7 (5495) => 22
145607 54da (54b7) => 23
145623 5506 (54da) => 2c
145639 5506 (5506) => 00
145655 5533 (5506) => 2d
145671 554c (5533) => 19
145687 554e (554c) => 02
145703 554e (554e) => 00
PIN: 1 2 3 4 5 6 7 8 9
áá«á! áá°á«á!
á¥á£ááá á«áµá°áá á¥á ášá°á ááá³ážá ášááá³ áááᜠášá ááµ ášá°áá°á PSoC - ášá°á ááá©á áµ áá á°ááá ááµ á áážáá¢
8. áá¥á áá á á?
áµááá ᣠá PSoC á á©áᣠá á¥á Aigo áµá«áá á ááµ ááµá¥ á¥áá ááááá¡-
- SRAM ášá°á á á á¢ááá ááá ᥠá¥ááœááá;
- áááá ášá¡áµ áášá³á°á« á¥ááµá á áá áá á¥á ášáá á®áµá á áá¥á³ á ááá ᥠášááš-ááážá«á°áµ á¥á áá ááá á¥ááœáááá¢
áááᣠá¥áá³áœá á ááá³á°á áœáá®áœ áááá«áµ á áá³ááµ ááµáá¶áœ á ááµá¢ á¥áá°áášá°áá áá»á»á ááœáá.
- á "áááá á¡áµ á±á«" á¥ááµ áááá«áµ ášá°áááá ášáá€áµ ááᥠá áµááá áááá³áµ ááááá« ááá á£
- ášá áá áµáááá ášáá áááášá¶áœá áááá á áš FPGA ááá¥áá áá áá (ááá á áá±áªá áááµáá áá£áªááœá áá áá)á¢
- áá á¥ááµ áááá©á¡ áá á°á¥á ášá°á³á³á° áá á®áµ á áµáá£á£ á³áá á áµáá³ á¥á RAM á£áᣠáááááá áµááááá áá á®áµ á RAM ááµá¥ á¥áá°áááᥠá°áµá á ááµášáᢠááá ááᣠášá áá±áªá á²ááá á°ášá 5 á®ááµ áµááá á á áá±áªá áá áá á ááµášá ááá á áá°ááᣠášáááášáášá áŠááµ áá á 3,3 á®ááµ á²áááᜠáá°á«áá¢
ááášá ášááœá á ááµ á áµá°á³áœ ááá ášáá£á¥ á¥á áá áááá á á®ááŽá á°ášá áá«ááµ áá. áá á á«ááµ áá€á³á ášááᣠášááᜠá áááá áá áá¹á áµáááá áášá ááááµ á¥ááœá áá á - áµáááá á«ááá ášáá áááášáµ á«áá áŒá á ááá ᥠášáá³ááá¢
SROM áááá£áµ á ReadBlock áµáááµ á¥áª á á©á ášá¥á á á¢áµáµá áµááá«áá¥á£ á¥á á¥áá°áá«á ááµášá á¥ááœááá
áá°ášá ášááœá áá á áµá°á³áœ ááá áá³á©á ášáºá áá ááµáá£áµ áá: SRAM á áááá°áµ, á°ááµ ášááážáá ášáµáááµ á¥áªáᜠá¥á áµááá¶áœá ááášáµ.
9. áá ááá«
áµááá ášáá á ááá á¥á á á¥á ášáááááá áá°áá ᣠáááá«á±á áá á®áµá ááášáážáµ áá°á á ("á áá«á«" á«ááá) áááá® ááá£á áªá« áá ááá ... á á°ášááªá ᣠááá®áœ ášáášá áá á¥ááŽáµ á¥áá°ááá± (á¥áµá«áá) á áášáá (á¥áµá«áá) á áá áá³áªá« áá ááµá á«!
á Aigo áá áááá©áµ ááœáá? áááµ ášá°áá°á á© ášá€áœá²á² áµá«áá ááŽááœá ášáášááá© á áá á 2015 á á«á
áááµ á á³áá á¥áá¶áœá á¥á á¥á ááœá¶áœá á á³ááá«áá áá áá á¥ááµá¢ á á á ááá áá° 40 á°á á³áµ. ášááááªá«á (á²áµáá áµášááµ) á¥áµáš áášášá»á (ášáá á®áµ áá£á) ááá á. á«á 40 á°á á³áµ áá á áœáá á áá»á á«á³ááá©áµá áá áášáá«áᢠá á£á á áµá°á³áœ áá áá áá¢
ááá: hab.com