рдЪрд┐рдкрд╡реНрдпреВрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ STM32F1xx рдлреНрд▓реИрд╢ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдкрдврд╝реЗрдВ


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдЪрд┐рдк-рдЧреНрд░реАрдкрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ Vcc-glitch рд╣рдорд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯрд╛ред рд╣рдорд╛рд░рд╛ рдЖрдЧреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЪрд░рдгрдмрджреНрдз рдЕрдзреНрдпрдпрди рдерд╛ред рдРрд╕реЗ рд╣рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЬреНрд╡рд▓рдВрдд рдЙрджрд╛рд╣рд░рдг рд╡реАрдХреЗ-рдЧреНрд▓рд┐рдЪ рд╣рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдордХреЗ STM32F042 рдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рд▓реЗрдЬрд░ рдиреИрдиреЛ рдПрд╕ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рд╡реЙрд▓реЗрдЯ рдХреА рд╣реИрдХрд┐рдВрдЧ рд╣реИ ред


рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрддреЗ рд╣реИрдВред


рд╣рдордиреЗ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рдЬреЛ рдПрдХ Vcc-glitch рд╣рдорд▓реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ - рдХрдИ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ (рдЗрд╕рдХреЗ рдмрд╛рдж - MK) рдХреЗ рд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RDP рд╕рдВрд░рдХреНрд╖рдг рдмрд╛рдЗрдЯ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛ред рд╣рдо рдИрдПрд╕рдкреА 32 рдХреЛ рддреЛрдбрд╝рдиреЗ рдкрд░ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред


рдЕрдзреНрдпрдпрди рдХрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЖрдзрд╛рд░ рдЪрд┐рдкрдкреАрд╕реАрд╢рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдорд╛рд╕реНрдХ рд╡рд╛рд▓реЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ LPC1114 рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдерд╛ред


рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдордиреЗ рдПрдордХреЗ STM32F103RBT6 рдмреЛрд░реНрдб рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:



рдмреЛрд░реНрдб STM32F103RBT6


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


рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЗрдЯрдЕрдк


рдЪрд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ ChipWhisperer рдХреЛ MK рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:



рдПрдХ рдорд╛рд╕реНрдХ рд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдкреАрдПрдо 32 рдХреЛ рдЪрд┐рдкрд╡рд░реНрдкрд░ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдЖрд░реЗрдЦ


STM32F103RBT6 рдмреЛрд░реНрдб рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд░реЗрдЦ (рдорд╛рдирдХ рдПрдордХреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рдкрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрд░ ChipWhisperer рдХреЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЗрд╕рдХреЗ рдкрд┐рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдмрд╛рд╣рд░реА рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рдорд╛рд╕реНрдХ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдордХреЗ STM32F103RBT6 24 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрддрд░рд┐рдХ CLOCK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП ChipWhisperer рдФрд░ MK рдореЗрдВ рдХреЛрдИ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реИред


рдЪрд▓рд┐рдП ChipWhisperer рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЪрд┐рдкрд╡рд┐рд╢рд░ рдХреА рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЖрд╡реГрддреНрддрд┐ 24 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ (рдпрд╛ рдПрдХ рдФрд░ рдХрдИ) рд╣реИред рдЗрд╕ рдЖрд╡реГрддреНрддрд┐ рдХреА рдмрд╣реБрд▓рддрд╛ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрдЧреА, рдЖрдк рдЙрддрдиреЗ рд╣реА рд╕рдЯреАрдХ рдврдВрдЧ рд╕реЗ рд╣рдорд▓реЗ рдХреЗ рдХреНрд╖рдг рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдЪрдпрди .glitch.offset рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


ChipWhisperer рдХреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдХреЛрдк.рдЧреНрд▓рд┐рдЪред рдХреНрд░реЗрдк рдФрд░ рд╕реНрдХреЛрдк.рдЧреНрд▓рд┐рдЪ.рд╡рд┐рдЪрд╛рд░рдг рдХреЛ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрдбрд╝реА рдЖрд╡реГрддреНрддрд┐ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рд╕рднреА рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рджрд╛рд▓реЛрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИред рдЧреНрд░рд┐рдбред рдХреНрд░реЗрдкреАрдЯ, рдПрдХ рд▓рдВрдмреЗ рдирд╛рдбрд╝реА рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдорд╛рди рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ редglitch.width, рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢.glitch.repeat рдлрд┐рдХреНрд╕, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╖реНрдЯрддрдо рдирд╛рдбрд╝реА рдХреА рдЕрд╡рдзрд┐ рд▓рдЧрднрдЧ 80 ns (рдЖрдзрд╛ рдЕрдзрд┐рдХрддрдо рдкрд░ рдирд╛рдбрд╝реА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдХреЛрдк рдорд╛рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ редglitch.ext_offsetред


рдЪрдпрди рдЧреБрдВрдЬрд╛рдЗрд╢ редglitch.ext_offset


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



рдлреНрд▓реИрд╢ рд╕реЗрдХреНрдЯрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо


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



рдореЗрдореЛрд░реА рд░реАрдб рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп (RDP рдЪреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдФрд░ рд╡рд┐рдлрд▓ рдЪреЗрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ NACK рднреЗрдЬрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ)



рдЖрд░рдбреАрдкреА рдорд╛рдиреНрдпрддрд╛ рд╕рдорд╛рд░реЛрд╣ рд╢рд░реАрд░


рдЖрд░рдбреАрдкреА рдЪреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ 0x40022000 + 0x1C рдкрд░ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ 30 рдмрд┐рдЯреНрд╕ рдФрд░ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдкрд╛рд░реА рд╣реИред PM0075 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореИрдиреБрдЕрд▓ (STM32F10xxx рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕) рдХреЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ 0x40022000 рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЖрдзрд╛рд░ рдкрддрд╛ рд╣реИ, рдФрд░ 0x1C FLASH-OBR рд░рдЬрд┐рд╕реНрдЯрд░ рдСрдлрд╕реЗрдЯ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╣рдо рджреВрд╕рд░реЗ рдЖрд░рдбреАрдкреАрдЖрд░рдЯреА рдмрд┐рдЯ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рд╕рдВрд░рдХреНрд╖рдг рдкрдврд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрд░рдбреАрдкреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрд░реЛрдд рд╣реИ ред


рд╣рдорд▓реЗ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖рдг LDR рдирд┐рд░реНрджреЗрд╢ (рдореЗрдореЛрд░реА рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛) рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдлрд░реНрдорд╡реЗрдпрд░ ( 0xEE рд╕рд╛рде 0xEE рдмрд╛рдЗрдЯ рднреЗрдЬрдирд╛) рдФрд░ UART рджреНрд╡рд╛рд░рд╛ ACK / NOACK MK рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдкрд▓ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрд╕рд┐рд▓реЛрд╕реНрдХреЛрдк рдХреЛ UART1_RX (рдкрд┐рди PA10) рдФрд░ UART1_TX (рдкрд┐рди PA9) рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдлрд┐рд░ UART1 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдирддреАрдЬрддрди, рдЪрдпрдирд┐рдд рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рдкрд╛рд╡рд░ рдЕрдЯреИрдХ рд╡реЗрд╡рдлреЙрд░реНрдо редglitch.ext_offset рд╡реИрд▓реНрдпреВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:



рд╣рдорд▓реЗ рдХрд╛ рдХреНрд╖рдг рдЪреБрдирдирд╛


рдлрд░реНрдорд╡реЗрдпрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрдврд╝реЗрдВ


рдЕрдм рдЖрдкрдХреЛ UART1_RX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрдХрд╕рдо рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдерди рдХреЛрдб рдореЗрдВ CW_TRIG рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдХреНрд╖рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд┐рдкрд╡рд┐рд╕реНрдкрд░ рдореЗрдВ рдПрд╕рдЯреАрдПрдо 32 рдПрдордХреЗ рдорд╛рд╕реНрдХрд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ programmer_stm32fserial.py software/chipwhisperer/hardware/naeusb/ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрде software/chipwhisperer/hardware/naeusb/ class STM32FSerial(object) рд╕реНрдерд┐рдд рдХреНрд▓рд╛рд╕ class STM32FSerial(object) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ MK рд╕реЗ рдореИрдиреБрдЕрд▓ рдХреЛ рдлрд░реНрдорд╡реЗрдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреНрд░рд┐рдЧрд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдХрдХреНрд╖рд╛ рдХреЛ рдореБрдЦреНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ CmdGeneric(self, cmd) рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рд╣реЛ рдЬрд╛рдП, рдФрд░ рдореЗрдореЛрд░реА рд╕реЗрдХреНрдЯрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдЪреЗрдХрд╕рдо (0xEE) рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ scope.arm() рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВред рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


STM32 рдХреЗ рд╕рд╛рде ChipWhisperer рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛
 import time import sys import logging from chipwhisperer.common.utils import util from chipwhisperer.hardware.naeusb.programmer_stm32fserial import supported_stm32f from chipwhisperer.capture.api.programmers import Programmer # class which can normally using internal CW library for reading STM32 firmware by UART class STM32Reader(Programmer): def __init__(self): super(STM32Reader, self).__init__() self.supported_chips = supported_stm32f self.slow_speed = False self.small_blocks = True self.stm = None def stm32prog(self): if self.stm is None: stm = self.scope.scopetype.dev.serialstm32f else: stm = self.stm stm.slow_speed = self.slow_speed stm.small_blocks = self.small_blocks return stm def stm32open(self): stm32f = self.stm32prog() stm32f.open_port() def stm32find(self): stm32f = self.stm32prog() stm32f.scope = self.scope sig, chip = stm32f.find() def stm32readMem(self, addr, lng): stm32f = self.stm32prog() stm32f.scope = self.scope #answer = stm32f.readMemory(addr, lng) answer = self.ReadMemory(addr, lng) return answer def stm32GetID(self): stm32f = self.stm32prog() stm32f.scope = self.scope answer = stm32f.cmdGetID() return answer # Needed for connection to STM after reload by reset_target(scope) method def FindSTM(self): #setup serial port (or CW-serial port?) stm32f = self.stm32prog() try: stm32f.initChip() except IOError: print("Failed to detect chip. Check following: ") print(" 1. Connections and device power. ") print(" 2. Device has valid clock (or remove clock entirely for internal osc).") print(" 3. On Rev -02 CW308T-STM32Fx boards, BOOT0 is routed to PDIC.") raise boot_version = stm32f.cmdGet() chip_id = stm32f.cmdGetID() for t in supported_stm32f: if chip_id == t.signature: # print("Detected known STMF32: %s" % t.name) stm32f.setChip(t) return chip_id, t # print("Detected unknown STM32F ID: 0x%03x" % chip_id) return chip_id, None 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ STM32F1xx рдорд╛рд╕реНрдХрд▓реЛрдбрд░ рдЖрдкрдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлреНрд▓реИрд╢ рд╕реЗрдХреНрдЯрд░ рд╕реЗ 256 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдПрдордХреЗ рдХреЗ рдкреВрд░реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ Vcc-glitch рд╣рдорд▓реЗ рдХреЗ рджреМрд░рд╛рди рдХрдИ рд░реАрдб рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдлрд┐рд░, рдкреНрд░рд╛рдкреНрдд 256 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЖрда 32-рдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирд╕реЗ рдПрдХ рд╣реЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред


рд╣реЗрдХреНрд╕ рдХрдирд╡рд░реНрдЯрд░ рдХреЛрдб рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп
 def int2str_0xFF(int_number, number_of_bytes): return '{0:0{1}X}'.format(int_number,number_of_bytes_in_string) def data_dividing_from_256_to_32_bytes (data_to_divide, mem_sector, mem_step=32): if mem_sector > 0xFFFF: mem_conversion = mem_sector >> 16 mem_conversion = mem_sector - (mem_conversion << 16) data_out = '' for i in range(int(256/mem_step)): data_vector = data_to_divide[(i * mem_step):((i + 1) * mem_step)] mem_calc = mem_conversion + (i * mem_step) data_out += read_and_convert_data_hex_file(data_vector, mem_calc, mem_step) + '\n' return data_out def read_and_convert_data_hex_file(data_to_convert, memory_address, mem_step): addr_string = memory_address -((memory_address >> 20) << 20) data_buffer = '' crcacc = 0 for x in range(0, len(data_to_convert)): data_buffer += int2str_0xFF(data_to_convert[x], 2) crcacc += data_to_convert[x] crcacc += mem_step temp_addr_string = addr_string for i in range (4, -1, -2): crcacc += temp_addr_string >> i*4 temp_addr_string -= ((temp_addr_string >> i*4) << i*4) crcacc_2nd_symbol = (crcacc >> 8) + 1 crcacc = (crcacc_2nd_symbol << 8) - crcacc if crcacc == 0x100: crcacc = 0 RECTYP = 0x00 out_string = ':'+ Int_To_Hex_String(mem_step, 2) +\ Int_To_Hex_String((addr_string),4) +\ Int_To_Hex_String(RECTYP, 2) +\ data_buffer +\ Int_To_Hex_String(crcacc, 2) return out_string def send_to_file(info_to_output, File_name, directory): file = open(directory + File_name + '.hex', 'w') file.write(info_to_output) file.close() def reset_target(scope): scope.io.nrst = 'low' time.sleep(0.05) scope.io.nrst = 'high' from collections import namedtuple Range = namedtuple('Range', ['min', 'max', 'step']) 

ChipWhisperer рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЕрдм рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдлрд░реНрдорд╡реЗрдпрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


 # string of start HEX file Start_of_File_Record = ':020000040800F2' # string of end HEX file End_of_File_Record = ':00000001FF' length_of_sector = 256 if length_of_sector % 4 != 0: sys.exit('length_of_sector must be equal to 4') output_to_file_buffer = '' output_to_file_buffer += Start_of_File_Record + '\n' mem_current = mem_start while mem_current < mem_stop: # flush the garbage from the computer's target read buffer target.ser.flush() # run aux stuff that should run before the scope arms here reset_target(scope) # initialize STM32 after each reset prog.FindSTM() try: # reading of closed memory sector data = prog.stm32readMem(mem_current, length_of_sector) except Exception as message: message = str(message) if "Can't read port" in message: # print('Port silence') pass elif 'Unknown response. 0x11: 0x0' in message: # print('Crashed. Reload!') pass elif 'NACK 0x11' in message: # print('Firmware is closed!') pass else: # print('Unknown error:', message, scope.glitch.offset, scope.glitch.width, scope.glitch.ext_offset) pass else: data_to_out = data_dividing_from_256_to_32_bytes (data, mem_current) print(data_to_out) output_to_file_buffer += data_to_out mem_current += length_of_sector output_to_file_buffer += End_of_File_Record + '\n' send_to_file(output_to_file_buffer, File_name, directory) 

рд╕рднреА рдиреЗ print() рдЖрдЙрдЯ print() рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж except Exception as рдореЗрдВ рдПрдорд╕реА рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ except Exception as рдорджрдж рдХреА, рдЬрдм рдЧрдбрд╝рдмрдбрд╝ рдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЦреЛрдЬ рдХреАред рдПрдордХреЗ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ print() рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдкрдврд╝рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо


рд╡реАрдбрд┐рдпреЛ ST-LINK рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MK рдХреЛ рдлрд░реНрдорд╡реЗрдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, RDP рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдлрд░реНрдорд╡реЗрдпрд░ рдкрдврд╝рдирд╛ рд╣реИ:



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╕рдлрд▓ Vcc-glitch рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддреА рд╣реИрдВ:


тАв рдореЗрдореЛрд░реА рдХреЗ рдЧрд▓рдд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрдврд╝рдирд╛;


тАв рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╣рдЬ рд╣рдЯрд╛рдиреЗред


ChipWhisperer рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдмрдврд╝рд╛рдХрд░ рд╣рдорд▓реЗ рдХрд╛ рд╕рдЯреАрдХ рд╕рдордп рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред


рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ ST-LINK-V2-V2.1 рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд░реАрдбрд┐рдВрдЧ рдХрд┐рдпрд╛, рдЬреЛ STM32F103CBT6 MK рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдлрд░реНрдорд╡реЗрдпрд░, рд╣рдордиреЗ рдПрдХ "рд╕рд╛рдл" рдПрдордХреЗ STM32F103CBT6 рдкрд░ рд╕рд┐рд▓рд╛рдИ рдХреА рдФрд░ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдПрдордХреЗ рдХреЗ рд╕рд╛рде ST-LINK-V2.1 рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рдерд╛ред


рд╣рдордиреЗ STM32F303RCT7 рдкрд░ рд╣рдорд▓реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рд╣рдорд▓реЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдПрдордХреЗ рдиреЗ STM32F103RBT6 рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд░реАрдб рдореЗрдореЛрд░реА рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 0x00 рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдмрд╛рдЗрдЯ рд╢рд╛рдорд┐рд▓ рдереА, рдЬреЛ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рдереА рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдереАред рдЗрд╕ рдЕрд╕рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдЗрди рдПрдордХреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдерд╛ред


STM32F1xx MK рдореЗрдВ рджреЛ рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рд╕реНрдЯреЗрдЯреНрд╕ рд╣реИрдВ: рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдСрдл (рд▓реЗрд╡рд▓ 0) рдФрд░ рдСрди (рд▓реЗрд╡рд▓ 1)ред рдкреБрд░рд╛рдиреЗ рдореЙрдбрд▓реЛрдВ рдореЗрдВ, рддреАрди рд╕реБрд░рдХреНрд╖рд╛ рд░рд╛рдЬреНрдп рд╣реИрдВ: рд╕реБрд░рдХреНрд╖рд╛ рдЕрдХреНрд╖рдо рд╣реИ (рд╕реНрддрд░ 0, RDP = 0x55AA), рдлрд╝реНрд▓реИрд╢ рдФрд░ SRAM рдореЗрдореЛрд░реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ (рд╕реНрддрд░ 2, RDP = 0x33CC) рдФрд░ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ (рд╕реНрддрд░ 1), RDP рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ 0x55AA рдФрд░ 0x33CC рд╕реЗ)ред рдЪреВрдВрдХрд┐ рд▓реЗрд╡рд▓ 1 рдХрдИ RDP рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрд╡рд▓ 0 рд╕реЗрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЖрд░рдбреАрдкреА рдмрд╛рдЗрдЯ рдореЗрдВ рдПрдХ рдмрд┐рдЯ рдиреАрдЪреЗ (рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЬреЛ SRAM рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреЛ рд╕реНрддрд░ 2 рд╕реЗ рд╕реНрддрд░ 1 рддрдХ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред



рдлрд░реНрдорд╡реЗрдпрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдбреАрдкреА рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛


рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдХреЛрдИ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдХреИрд╕реЗ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реАрдмреАрдПрд╕ (рдХреЛрд▓реНрдб-рдмреВрдЯ рд╕реНрдЯреЗрдкрд┐рдВрдЧ) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА, рд╣рд┐рдбрди рдкрд╛рд╕рд╡рд░реНрдб рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MC рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж SRAM рдореЗрдореЛрд░реА рдХреА рд╕реНрдерд┐рддрд┐ (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреА рдЖрд╡реГрддреНрддрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рдереА) рдХреЗ рдЪрд░рдгрдмрджреНрдз рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд▓реЗрдЦрдХреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╕реАрдмреАрдПрд╕ рд╡рд┐рдзрд┐ рд╕рднреА рдПрд╕рдЯреАрдПрдо 32 рдПрдордХреЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреАред


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


рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдирд╛ред рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрдпрди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ (рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрд╕реАрд╕реА рдЧреНрд▓рд┐рдЪ рд╣рдорд▓реЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рдХрдИ рджрд┐рди рд▓рдЧ рдЧрдПред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред


Vcc-glitch рд╣рдорд▓реЗ рдЦрддрд░рдирд╛рдХ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд╕реЗ рдмрдЪрд╛рд╡ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдРрд╕реЗ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдПрдордХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред



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


Source: https://habr.com/ru/post/hi483732/


All Articles