From c36edac3717f19d63e27d97f99ba7a13b76bb5f6 Mon Sep 17 00:00:00 2001 From: sys64738 Date: Thu, 3 Mar 2022 23:44:50 +0100 Subject: [PATCH] length param sweeping --- src/cli/rl78-glitch.c | 2 +- src/glitch/glitch.c | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/cli/rl78-glitch.c b/src/cli/rl78-glitch.c index b3df519..b291682 100644 --- a/src/cli/rl78-glitch.c +++ b/src/cli/rl78-glitch.c @@ -20,7 +20,7 @@ void cli_tool78_glitch_paramsearch(void); void cli_tool78_glitch_ocd_dump(void); #define DUMP_OFFSET 0/*0xef000*/ -#define DUMP_SIZE 4096 +#define DUMP_SIZE 65536 // test with decoupling caps: length in 20..500(..1500) -> ok // testing on ocd lock: length: 5..35 diff --git a/src/glitch/glitch.c b/src/glitch/glitch.c index 2bc132b..43de7b2 100644 --- a/src/glitch/glitch.c +++ b/src/glitch/glitch.c @@ -46,18 +46,25 @@ static void CORE1_FUNC(pcg32_fast_init)(uint64_t seed) { (void)pcg32_fast(); } - - // ADC value is in low 12 bits of adc_read() // FIXME: length_min_us = -1 => adc breaks? | oops was signedness bug #define CORE1_PRE_CALC() /* BIG TODO HERE! */ \ - uint32_t off = param_cur.offset_min_us + \ + bool sweep = param_cur.offset_min_us == param_cur.offset_max_us \ + && param_cur.length_min_us >= 0; \ + uint32_t len, off = param_cur.offset_min_us + \ (pcg32_fast() % (param_cur.offset_max_us - param_cur.offset_min_us)), \ - len = (param_cur.length_min_us < 0) \ - ? (((uint32_t)adc_read() * param_cur.length_max_us) >> 12) \ + iom = 1u << param_cur.glitch_out_pin; \ + do { \ + if (sweep) { \ + if (len_prev == param_cur.length_max_us) len_prev = (len = param_cur.length_min_us); \ + else len = (len_prev = (len_prev + 1));\ + } else { \ + len = (param_cur.length_min_us < 0) \ + ? (((uint32_t)adc_read() * param_cur.length_max_us) >> 12) \ : (param_cur.length_min_us + (pcg32_fast() % \ - (param_cur.length_max_us - param_cur.length_min_us))), \ - iom = 1u << param_cur.glitch_out_pin \ + (param_cur.length_max_us - param_cur.length_min_us))); \ + } \ + } while (0) \ #define CORE1_DO_GLITCH() \ do { \ @@ -74,6 +81,8 @@ static void CORE1_FUNC(glitch_core1_thread)(void) { // SRAM 5 to avoid bus contention pcg32_fast_init(random()); + int32_t len_prev = param_cur.length_min_us - 1; + __disable_irq(); if (param_cur.trigger_in_pin < 0) {