Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛

рдпрд╣ рдмрд╛рд╣рд░реА рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рдФрд░ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕рд╣рдХрд░реНрдореА рдореЗрд░реЗ рд▓рд┐рдП рдкреИрдЯреНрд░рд┐рдпрдЯ (рдПрдЧреЛ) SK8671 рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рд▓рд╛рдпрд╛ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрд▓рдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдореИрдВ рдЙрд╕рд╕реЗ рдЬреЛ рдирд┐рдХрд▓рд╛ рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╡рд╢реНрдп рдкрдврд╝реЗрдВ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд▓реЗрдЦред

4. рд╣рдо рдЖрдВрддрд░рд┐рдХ PSoC рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
5. рдЖрдИрдПрд╕рдПрд╕рдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓
тАУ 5.1. рдЖрдИрдПрд╕рдПрд╕рдкреА рдХреНрдпрд╛ рд╣реИ?
тАУ 5.2. рд╕рджрд┐рд╢реЛрдВ рдХрд╛ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди
тАУ 5.3. рдкреАрдПрд╕рдУрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░
тАУ 5.4. рдСрди-рдЪрд┐рдк рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди
тАУ 5.5. рд╕реБрд░рдХреНрд╖рд╛ рдмрд┐рдЯреНрд╕
6. рдкрд╣рд▓рд╛ (рдЕрд╕рдлрд▓) рд╣рдорд▓рд╛: ROMX
7. рджреВрд╕рд░рд╛ рд╣рдорд▓рд╛: рдХреЛрд▓реНрдб рдмреВрдЯ рдЯреНрд░реЗрд╕рд┐рдВрдЧ
тАУ 7.1. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
тАУ 7.2. рдкрд░рд┐рдгрд╛рдо рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдБ
тАУ 7.3. рдлрд╝реНрд▓реИрд╢ рдмрд╛рдЗрдирд░реА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
тАУ 7.4. рдкрд┐рди рдХреЛрдб рднрдВрдбрд╛рд░рдг рдкрддрд╛ рдвреВрдБрдврдирд╛
тАУ 7.5. рдмреНрд▓реЙрдХ рдирдВрдмрд░ 126 рдХрд╛ рдбрдВрдк рд▓реЗрддреЗ рд╣реБрдП
тАУ 7.6. рдкрд┐рди рдХреЛрдб рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
8. рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
9ред рдирд┐рд╖реНрдХрд░реНрд╖

Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛


4. рд╣рдо рдЖрдВрддрд░рд┐рдХ PSoC рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рддреЛ, рд╕рдм рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ [рдкрд╣рд▓реЗ рднрд╛рдЧ]() рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ) рдХрд┐ рдкрд┐рди рдХреЛрдб рдкреАрдПрд╕рдУрд╕реА рдХреА рдлреНрд▓реИрд╢ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрди рдлреНрд▓реИрд╢ рдЧрд╣рд░рд╛рдИрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЬрд░реВрд░реА рдХрд╛рдо рдХрд╛ рдореЛрд░реНрдЪрд╛:

  • рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде "рд╕рдВрдЪрд╛рд░" рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд▓реЗрдВ;
  • рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдвреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ "рд╕рдВрдЪрд╛рд░" рдмрд╛рд╣рд░ рд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ;
  • рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред

рдРрд╕реЗ рджреЛ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡реИрдз рдкрд┐рди рдХреЛрдб рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ:

  • рдЖрдВрддрд░рд┐рдХ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА;
  • SRAM, рдЬрд╣рд╛рдВ рдкрд┐рди рдХреЛрдб рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд┐рди рдХреЛрдб рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЖрдВрддрд░рд┐рдХ рдкреАрдПрд╕рдУрд╕реА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдбрдВрдк рд▓реЗрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ - рдЖрдИрдПрд╕рдПрд╕рдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреЗ рдмрд╛рдж - "рдХреЛрд▓реНрдб рдмреВрдЯ рдЯреНрд░реЗрд╕рд┐рдВрдЧ" рдирд╛рдордХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╣рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд┐рди рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдбрдВрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓ рдЧрдИред

$ ./psoc.py 
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9

рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб:

5. рдЖрдИрдПрд╕рдПрд╕рдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓

5.1. рдЖрдИрдПрд╕рдПрд╕рдкреА рдХреНрдпрд╛ рд╣реИ?

рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде "рд╕рдВрдЪрд╛рд░" рдХрд╛ рдорддрд▓рдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: "рд╡рд┐рдХреНрд░реЗрддрд╛ рд╕реЗ рд╡рд┐рдХреНрд░реЗрддрд╛" рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рддрдЪреАрдд рддрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдХреЗ рдкреАрдЖрдИрд╕реА рдХреЗ рд▓рд┐рдП рдЖрдИрд╕реАрдПрд╕рдкреА)ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдкреНрд░рд╕ рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдИрдПрд╕рдПрд╕рдкреА (рдЗрди-рд╕рд┐рд╕реНрдЯрдо рд╕реАрд░рд┐рдпрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрдХрдиреАрдХреА рд╡рд┐рдирд┐рд░реНрджреЗрд╢. US7185162 рдкреЗрдЯреЗрдВрдЯ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рднреА рджреЗрддрд╛ рд╣реИ. рдПрдЪрдПрд╕рдПрд╕рдкреА рдирд╛рдордХ рдПрдХ рдУрдкрдирд╕реЛрд░реНрд╕ рд╕рдорддреБрд▓реНрдп рднреА рд╣реИ (рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ)ред рдЖрдИрдПрд╕рдПрд╕рдкреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • PSoC рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВ;
  • рдЗрд╕ PSoC рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдбреЗрдЯрд╛ рдкрд┐рди рдкрд░ рдЬрд╛рджреБрдИ рд╕рдВрдЦреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ; рдмрд╛рд╣рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
  • рдЖрджреЗрд╢ рднреЗрдЬреЗрдВ, рдЬреЛ рд▓рдВрдмреА рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ "рд╡реЗрдХреНрдЯрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

ISSP рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрди рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдореБрдЯреНрдареА рднрд░ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

  • рдЖрд░рдВрднреАрдХрд░рдг-1
  • рдЖрд░рдВрднреАрдХрд░рдг-2
  • рдкреНрд░рд╛рд░рдВрднрд┐рдХ-3 (3рд╡реА рдФрд░ 5рд╡реА рд╡рд┐рдХрд▓реНрдк)
  • рдЖрдИрдбреА-рд╕реЗрдЯрдЕрдк
  • рдкрдврд╝реЗрдВ-рдкрд╣рдЪрд╛рди-рд╢рдмреНрдж
  • рд╕реЗрдЯ-рдмреНрд▓реЙрдХ-рдирдВрдмрд░: 10011111010dddddddd111, рдЬрд╣рд╛рдВ dddddddd=рдмреНрд▓реЙрдХ #
  • рдереЛрдХ рдорд┐рдЯрд╛рдПрдБ
  • рдХрд╛рд░реНрдпрдХреНрд░рдо рдмреНрд▓реЙрдХ
  • рд╕рддреНрдпрд╛рдкрд┐рдд-рд╕реЗрдЯрдЕрдк
  • рдкрдврд╝реЗрдВ-рдмрд╛рдЗрдЯ: 10110aaaaaZDDDDDDDDZ1, рдЬрд╣рд╛рдВ DDDDDDDD = рдбреЗрдЯрд╛ рдЖрдЙрдЯ, рдЖрдЖ = рдкрддрд╛ (6 рдмрд┐рдЯреНрд╕)
  • рд░рд╛рдЗрдЯ-рдмрд╛рдЗрдЯ: 10010aaaaaaddddddd111, рдЬрд╣рд╛рдВ dddddddd = рдбреЗрдЯрд╛ рдЗрди, рдЖрдЖрдЖ = рдкрддрд╛ (6 рдмрд┐рдЯреНрд╕)
  • рд╕реБрд░рдХреНрд╖рд┐рдд
  • рдЪреЗрдХрд╕рдо-рд╕реЗрдЯрдЕрдк
  • рдкрдврд╝реЗрдВ-рдЪреЗрдХрд╕рдо: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1, рдЬрд╣рд╛рдВ DDDDDDDDDDDDDDDD = рдбреЗрдЯрд╛ рдЖрдЙрдЯ: рдбрд┐рд╡рд╛рдЗрд╕ рдЪреЗрдХрд╕рдо
  • рдмреНрд▓реЙрдХ рдорд┐рдЯрд╛рдПрдБ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝-2 рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░:

1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111

рд╕рднреА рд╡реИрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рд╕рдорд╛рди рд╣реИ: 22 рдмрд┐рдЯреНрд╕ред рдПрдЪрдПрд╕рдПрд╕рдкреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЖрдИрдПрд╕рдПрд╕рдкреА рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ: "рдЖрдИрдПрд╕рдПрд╕рдкреА рд╡реЗрдХреНрдЯрд░ рдПрдХ рдмрд┐рдЯ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред"

5.2. рд╕рджрд┐рд╢реЛрдВ рдХрд╛ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдпреЗ рд╡рд╣реА рд╡реИрдХреНрдЯрд░ M8C рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдХрдЪреНрдЪреЗ рд╕рдВрд╕реНрдХрд░рдг рдереЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рдСрдкрдХреЛрдб рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рдереЗред

рдлрд┐рд░ рдореИрдВрдиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреВрдЧрд▓ рдкрд░ рдЦреЛрдЬрд╛ рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдПрдХ рдЕрдзреНрдпрдпрди рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ: тАЬрдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рддреАрди рдмрд┐рдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЪрд╛рд░ рдирд┐рдореЛрдирд┐рдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ (рд░реИрдо рд╕реЗ рдкрдврд╝реЗрдВ, рд░реИрдо рд╕реЗ рд▓рд┐рдЦреЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝реЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░ рд▓рд┐рдЦреЗрдВ)ред рдлрд┐рд░ 8 рдПрдбреНрд░реЗрд╕ рдмрд┐рдЯреНрд╕ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж 8 рдбреЗрдЯрд╛ рдмрд┐рдЯреНрд╕ (рдкрдврд╝реЗрдВ рдпрд╛ рд▓рд┐рдЦреЗрдВ) рдФрд░ рдЕрдВрдд рдореЗрдВ рддреАрди рд╕реНрдЯреЙрдк рдмрд┐рдЯреНрд╕ рд╣реИрдВред

рддрдм рдореИрдВ "рдкрд░реНрдпрд╡реЗрдХреНрд╖реА ROM (SROM)" рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдХреБрдЫ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реБрдЖ рддрдХрдиреАрдХреА рдкреБрд╕реНрддрд┐рдХрд╛. SROM PSoC рдореЗрдВ рдПрдХ рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб ROM рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди (Syscall рдХреЗ рд╕рдорд╛рди) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • 00h:SWBootReset
  • 01 рдмрдЬреЗ: рд░реАрдбрдмреНрд▓реЙрдХ
  • 02 рдмрдЬреЗ: рд░рд╛рдЗрдЯрдмреНрд▓реЙрдХ
  • 03 рдмрдЬреЗ: рдЗрд░реЗрдЬрд╝рдмреНрд▓реЙрдХ
  • 06 рдмрдЬреЗ: рдЯреЗрдмрд▓рд░реАрдб
  • 07 рдмрдЬреЗ: рдЪреЗрдХрд╕рдо
  • 08 рдмрдЬреЗ: рдХреИрд▓рд┐рдмреНрд░реЗрдЯ0
  • 09 рдмрдЬреЗ: рдХреИрд▓рд┐рдмреНрд░реЗрдЯ1

рд╡реЗрдХреНрдЯрд░ рдирд╛рдореЛрдВ рдХреА SROM рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд SROM рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо ISSP рд╡реИрдХреНрдЯрд░ рдХреЗ рдкрд╣рд▓реЗ рддреАрди рдмрд┐рдЯреНрд╕ рдХреЛ рдбреАрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • 100 => "рд░реЗрдо"
  • 101 => "рдЖрд░рдбреАрдПрдордИрдПрдо"
  • 110 => "рдЧрд▓рдд"
  • 111 => тАЬrdregтАЭ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдСрди-рдЪрд┐рдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕рдордЭ рдХреЗрд╡рд▓ PSoC рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

5.3. рдкреАрдПрд╕рдУрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░

рдЪреВрдБрдХрд┐ рдбрд┐рд░реНрдХ рдкреЗрдЯреНрд░реЙрдЯреНрд╕реНрдХреА рдкрд╣рд▓реЗ рд╣реА рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдкреЛрд░реНрдЯ Arduino рдкрд░ Cypress рдХрд╛ HSSP рдХреЛрдб, рдореИрдВрдиреЗ рдХреАрдмреЛрд░реНрдб рдмреЛрд░реНрдб рдХреЗ ISSP рдХрдиреЗрдХреНрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Arduino Uno рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдкрдиреЗ рд╢реЛрдз рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдбрд┐рд░реНрдХ рдХрд╛ рдХреЛрдб рдХрд╛рдлреА рд╣рдж рддрдХ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЖрдк рдореЗрд░рд╛ рд╕рдВрд╢реЛрдзрди GitHub рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣рд╛рдВ рдФрд░ рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ Arduino рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ cypress_psoc_tools.

рдЗрд╕рд▓рд┐рдП, Arduino рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ "рд╕рдВрдЪрд╛рд░" рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ VERIFY рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ ROM рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд░рд╣рд╛ред рд╕рдВрднрд╡рддрдГ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд░реАрдб рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдмрд┐рдЯреНрд╕ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдЕрдВрджрд░ рд╕рдХреНрд░рд┐рдп рд╣реИрдВред

рдлрд┐рд░ рдореИрдВрдиреЗ рдореЗрдореЛрд░реА/рд░рдЬрд┐рд╕реНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреБрдЫ рд╕рд░рд▓ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдПред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╣рдо рд╕рдВрдкреВрд░реНрдг SROM рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ!

5.4. рдСрди-рдЪрд┐рдк рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди

"рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП" рд╡реИрдХреНрдЯрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ M0C рдСрдкрдХреЛрдб рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (8xF0-8xFA) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдореБрдЭреЗ "ADD", "MOV A, X", "PUSH" рдпрд╛ "JMP" рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдСрдкрдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реАред рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдЙрдирдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рджреЗрдЦрдХрд░) рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдХреМрди рд╕реЗ рдЧреИрд░-рджрд╕реНрддрд╛рд╡реЗрдЬреА рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ (рдП, рдПрдХреНрд╕, рдПрд╕рдкреА рдФрд░ рдкреАрд╕реА) рдереЗред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, 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. рд╕реБрд░рдХреНрд╖рд╛ рдмрд┐рдЯреНрд╕

рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреАрдПрд╕рдУрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдмрд┐рдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рд╕рд╛рдЗрдкреНрд░рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВрдиреЗ Google рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрдЬ рдХреА рд╣реИ рдХрд┐ рд╕рд╛рдЗрдкреНрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ 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 рдореЗрдВ read_security_data рджреЗрдЦреЗрдВ), рд╣рдореЗрдВ SRAM рдореЗрдВ рд╕рднреА рд╕реБрд░рдХреНрд╖рд╛ рдмрд┐рдЯреНрд╕ 0x80 рдкрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐ рд╕рдВрд░рдХреНрд╖рд┐рдд рдмреНрд▓реЙрдХ рдореЗрдВ рджреЛ рдмрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ: рд╕рдм рдХреБрдЫ "рдмрд╛рд╣рд░реА рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ" рдореЛрдб рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рди рдХреЗрд╡рд▓ рд╣рдо рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╣рдо рдХреБрдЫ рднреА рд▓рд┐рдЦ рднреА рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдВ рдПрдХ ROM рдбрдореНрдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рдк рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд┐рдЯрд╛ рджреЗрдирд╛ рд╣реИред ЁЯЩБ

6. рдкрд╣рд▓рд╛ (рдЕрд╕рдлрд▓) рд╣рдорд▓рд╛: ROMX

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреБрдХреНрддрд┐ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдордирдорд╛рдирд╛ рдСрдкрдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рддреЛ ROMX рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд░реАрдбрдмреНрд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрд╕рдЖрд░рдУрдПрдо (рдЬреЛ рд╡реИрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдЖрдИрдПрд╕рдПрд╕рдкреА рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, 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. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЖрдИрдПрд╕рдПрд╕рдкреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЪреЗрдХрд╕рдо-рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реЗрдХреНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

[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 рд░рдЬрд┐рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓рдХреНрд╖реНрдп рдлреНрд▓реИрд╢ рдмреИрдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рдЗрд╕рдореЗрдВ рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░рдХреЗ)ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪреЗрдХрд╕рдо рд╣реИ: рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдмрд╕ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ; рдХреЛрдИ рдлреИрдВрд╕реА рд╕реАрдЖрд░рд╕реА рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ M8C рдХреЛрд░ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╕реЗрдЯ рд╣реИ, рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдордзреНрдпрд╡рд░реНрддреА рдорд╛рди рдЙрдиреНрд╣реАрдВ рдЪрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдЬреЛ рдЕрдВрддрддрдГ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ: KEY1 (0xF8) / KEY2 ( 0xF9).

рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рд╣рдорд▓рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  1. рд╣рдо рдЖрдИрдПрд╕рдПрд╕рдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред
  2. рд╣рдо CHECKSUM-SETUP рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
  3. рд╣рдо рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЯреА рдХреЗ рдмрд╛рдж рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд░реАрдмреВрдЯ рдХрд░рддреЗ рд╣реИрдВред
  4. рд╣рдо рд╡рд░реНрддрдорд╛рди рдЪреЗрдХрд╕рдо рд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдо рдкрдврд╝рддреЗ рд╣реИрдВред
  5. рдЪрд░рдг 3 рдФрд░ 4 рдХреЛ рджреЛрд╣рд░рд╛рдПрдБ, рд╣рд░ рдмрд╛рд░ рдЯреА рдХреЛ рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рддреЗ рд╣реБрдПред
  6. рд╣рдо рдореМрдЬреВрджрд╛ рдЪреЗрдХрд╕рдо рд╕реА рд╕реЗ рдкрд┐рдЫрд▓реЗ рдЪреЗрдХрд╕рдо рд╕реА рдХреЛ рдШрдЯрд╛рдХрд░ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: 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

рдпрд╣ рдХреЛрдб рдХреИрд▓рд┐рдмреНрд░реЗрдЯ1 (рдПрд╕рдЖрд░рдУрдПрдо рдлрд╝рдВрдХреНрд╢рди 9) рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдмрд╣реБрдореВрд▓реНрдп рдЪреЗрдХрд╕рдо рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ... рд╢рд╛рдпрдж рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЬрд┐рдХ рдирдВрдмрд░ (рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ) рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрд╕рдЖрд░рдПрдПрдо рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЗрд╕ рд╣рдорд▓реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ 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();

  1. checkum_delay рдкрдврд╝реЗрдВ.
  2. рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдЪрд▓рд╛рдПрдБ (send_checksum_v)ред
  3. рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ; рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП:
    • рдореИрдВрдиреЗ рддрдм рддрдХ рдмрд╣реБрдд рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдирд┐рдХрд▓рд╛ рджреЗрд░реАрдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреЗрд╡рд▓ 16383 ╬╝s рд╕реЗ рдЕрдзрд┐рдХ рдХреА рджреЗрд░реА рдХреЗ рд╕рд╛рде рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
    • рдФрд░ рдлрд┐рд░ рдЙрддрдирд╛ рд╣реА рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рдбрд┐рд▓реЗрдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб, рдпрджрд┐ 0 рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
  4. PSoC рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд░реАрдмреВрдЯ рдХрд░реЗрдВ (рд╣рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡реИрдХреНрдЯрд░ рднреЗрдЬреЗ рдмрд┐рдирд╛, рдХреЗрд╡рд▓ рдореИрдЬрд┐рдХ рдирдВрдмрд░ рднреЗрдЬрддреЗ рд╣реИрдВ)ред

рдкрд╛рдпрдерди рдореЗрдВ рдЕрдВрддрд┐рдо рдХреЛрдб:

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))

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:

  1. PSoC рдХреЛ рд░реАрдмреВрдЯ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕реЗ рдПрдХ рдЬрд╛рджреБрдИ рдирдВрдмрд░ рднреЗрдЬрддрд╛ рд╣реИ)ред
  2. рдкреВрд░реНрдг рдЖрд░рдВрднреАрдХрд░рдг рд╡реИрдХреНрдЯрд░ рднреЗрдЬрддрд╛ рд╣реИред
  3. Arduino рдлрд╝рдВрдХреНрд╢рди Cmnd_STK_START_CSUM (0x85) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдЪреЗрдХрд╕рдо (0xF8 рдФрд░ 0xF9) рдФрд░ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ 0xF1 рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

рдпрд╣ рдХреЛрдб 10 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ 1 рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред 0xF1 рдХреЛ рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдерд╛ рдЬреЛ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдмрджрд▓ рдЧрдпрд╛ рдерд╛ред рд╢рд╛рдпрдж рдпрд╣ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рддрд░реНрдХ рдЗрдХрд╛рдИ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рд╣реИред рдЙрд╕ рдмрджрд╕реВрд░рдд рд╣реИрдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдкрд┐рдХреЛрдХреЙрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Arduino рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм Arduino рдЬреАрд╡рди рдХреЗ рд▓рдХреНрд╖рдг рджрд┐рдЦрд╛рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ (рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ)ред

7.2. рдкрд░рд┐рдгрд╛рдо рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдБ

рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд):

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

рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪреЗрдХрд╕рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдкрдврд╝реЗ рдЧрдП рдореВрд▓реНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рдкреВрд░реА рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (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 рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЪреЗрдХрд╕рдо рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЪреЗрдХрд╕рдо рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ! рд╡рд╣ред рд╣рдо 64-рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рддрдХ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдкрд┐рди рдХреЛрдб рдФрд░ "рдЧрд▓рдд рдкреНрд░рдпрд╛рд╕" рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдкрддреЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд░рдиреЛрдВ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд┐рдП:

Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛

рдлрд┐рд░ рдореИрдВрдиреЗ рдкрд┐рди рдХреЛрдб рдХреЛ "123456" рд╕реЗ "1234567" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рд╛:

Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд┐рди рдХреЛрдб рдФрд░ рдЧрд▓рдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рдмреНрд▓реЙрдХ рд╕рдВрдЦреНрдпрд╛ 126 рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

7.5. рдмреНрд▓реЙрдХ рдирдВрдмрд░ 126 рдХрд╛ рдбрдВрдк рд▓реЗрддреЗ рд╣реБрдП

рдмреНрд▓реЙрдХ #126, рдореЗрд░реЗ рдкреВрд░реНрдг рдбрдВрдк рдореЗрдВ, рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ, 125x64x18 = 144000╬╝s рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╣реАрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдХрд╛рдлреА рдкреНрд░рд╢рдВрд╕рдиреАрдп рд▓рдЧрддрд╛ рд╣реИред рдлрд┐рд░, рдХрдИ рдЕрдорд╛рдиреНрдп рдбрдВрдкреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж ("рдорд╛рдореВрд▓реА рд╕рдордп рд╡рд┐рдЪрд▓рди" рдХреЗ рд╕рдВрдЪрдп рдХреЗ рдХрд╛рд░рдг), рдореБрдЭреЗ рдпреЗ рдмрд╛рдЗрдЯреНрд╕ (145527 ╬╝s рдХреА рд╡рд┐рд▓рдВрдмрддрд╛ рдкрд░) рдкреНрд░рд╛рдкреНрдд рд╣реБрдИрдВ:

Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд┐рди рдХреЛрдб рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ! рдмреЗрд╢рдХ, рдпреЗ рдорд╛рди ASCII рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╡реЗ рдХреИрдкреЗрд╕рд┐рдЯрд┐рд╡ рдХреАрдмреЛрд░реНрдб рд╕реЗ рд▓реА рдЧрдИ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдХрд┐ рдЦрд░рд╛рдм рдкреНрд░рдпрд╛рд╕ рдХрд╛рдЙрдВрдЯрд░ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдерд╛ред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

Aigo рд╕реЗрд▓реНрдл-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЙрд▓рдЯрдирд╛ рдФрд░ рд╣реИрдХ рдХрд░рдирд╛ред рднрд╛рдЧ 2: рд╕рд╛рдЗрдкреНрд░рд╕ рдкреАрдПрд╕рдУрд╕реА рд╕реЗ рдбрдВрдк рд▓реЗрдирд╛

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. рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?

рддреЛ, рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдПрдЧреЛ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдкреАрдПрд╕рдУрд╕реА рдкрдХреНрд╖ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ:

  • рд╣рдо SRAM рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡рд╣ рд░реАрдб рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рд╣реЛ;
  • рд╣рдо рдХреЛрд▓реНрдб рдмреВрдЯ рдЯреНрд░реЗрд╕ рдЕрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рд╕реАрдзреЗ рдкрд┐рди рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░ рдПрдВрдЯреА-рд╕реНрд╡рд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рд╣рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рдорд┐рдпрд╛рдБ рд╣реИрдВред рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • "рдХреЛрд▓реНрдб рдмреВрдЯ рдЯреНрд░реЗрд╕" рд╣рдорд▓реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓рд┐рдЦреЗрдВ;
  • рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╕рдордп рд╡рд┐рд▓рдВрдм рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП FPGA рдЧреИрдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╛ Arduino рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ);
  • рдПрдХ рдФрд░ рд╣рдорд▓реЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рдЬрд╛рдирдмреВрдЭрдХрд░ рдЧрд▓рдд рдкрд┐рди рдХреЛрдб рджрд░реНрдЬ рдХрд░реЗрдВ, рд░реИрдо рдХреЛ рд░реАрдмреВрдЯ рдХрд░реЗрдВ рдФрд░ рдбрдВрдк рдХрд░реЗрдВ, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╕рд╣реА рдкрд┐рди рдХреЛрдб рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд░реИрдо рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, Arduino рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Arduino рд╕рд┐рдЧреНрдирд▓ рд╕реНрддрд░ 5 рд╡реЛрд▓реНрдЯ рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдЬрд┐рд╕ рдмреЛрд░реНрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ 3,3 рд╡реЛрд▓реНрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬрд╝ рдЬрд┐рд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд░реАрдб рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ред рдпрджрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдЯреАрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ - рд╕рдЯреАрдХ рд╕рдордп рд╡рд┐рд▓рдВрдм рдХреЗ рд╕рд╛рде рдЪреЗрдХрд╕рдо рдХреЛ рдкрдврд╝рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдпред

рдЪреВрдБрдХрд┐ SROM рд╕рдВрднрд╡рддрдГ рд░реАрдбрдмреНрд▓реЙрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд╛рд░реНрдб рдмрд┐рдЯреНрд╕ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рд╣рдо рд╡рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд░реНрдгрд┐рдд рджрд┐рдорд┐рддреНрд░реА рдиреЗрдбреЛрд╕реНрдкрд╛рд╕реЛрд╡ рдХреЗ рдмреНрд▓реЙрдЧ рдкрд░ - рдХреНрд░рд┐рд╕ рдЧреЗрд░рд▓рд┐рдВрд╕реНрдХреА рдХреЗ рд╣рдорд▓реЗ рдХрд╛ рдкреБрдирдГ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ "рд░реАрдХреЙрди рдмреНрд░реБрд╕реЗрд▓реНрд╕ 2017".

рдПрдХ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬрд╝ рдЬреЛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ рдЪрд┐рдк рд╕реЗ рдХреЗрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛: рдПрд╕рдЖрд░рдПрдПрдо рдбрдВрдк рд▓реЗрдирд╛, рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ред

9ред рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдбреНрд░рд╛рдЗрд╡ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╡рд╛рдВрдЫрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рди рдХреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд ("рдХрдареЛрд░" рдирд╣реАрдВ) рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ... рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ (рдЕрднреА рддрдХ) рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдЪрд▓ рд░рд╣реА рд╣реИрдВ рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди!

рдЖрдк рдРрдЧреЛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб HDD рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдХреБрдЫ рдореЙрдбрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, 2015 рдореЗрдВ рдореИрдВрдиреЗ рдмрдирд╛рдпрд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ SyScan рдкрд░, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдмрд╛рд╣рд░реА HDD рдбреНрд░рд╛рдЗрд╡ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдФрд░ рдЙрдирдореЗрдВ рдХреНрдпрд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдХреАрдВред ЁЯЩВ

рдореИрдВрдиреЗ рдЗрд╕ рд╢реЛрдз рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рджреЛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдФрд░ рдХрдИ рд╢рд╛рдореЗрдВ рдмрд┐рддрд╛рдИрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд▓рдЧрднрдЧ 40 рдШрдВрдЯреЗред рд╢реБрд░реБрдЖрдд рд╕реЗ (рдЬрдм рдореИрдВрдиреЗ рдбрд┐рд╕реНрдХ рдЦреЛрд▓реА) рд╕реЗ рдЕрдВрдд рддрдХ (рдкрд┐рди рдХреЛрдб рдбрдВрдк) рдЧрд┐рдирддреА рдХреАред рдЙрдиреНрд╣реАрдВ 40 рдШрдВрдЯреЛрдВ рдореЗрдВ рд╡рд╣ рд╕рдордп рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рд╣реА рд░реЛрдорд╛рдВрдЪрдХ рдпрд╛рддреНрд░рд╛ рдереА.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ