Merge commit '231d42d58172a2169d99c6e618192ac0d514d3b9' into sam-update

This commit is contained in:
Jason Kotzin 2022-08-01 18:50:19 -07:00
commit 95655b838e
16 changed files with 32 additions and 22 deletions

View File

@ -79,10 +79,12 @@ def stm32_manifest(dev):
sleep(status.bwPollTimeout / 1000.0) sleep(status.bwPollTimeout / 1000.0)
if status.bState == dfu.STATE_DFU_MANIFEST: if status.bState == dfu.STATE_DFU_MANIFEST:
break break
def stm32_scan(args): def stm32_scan(args, test):
devs = dfu.finddevs() devs = dfu.finddevs()
bmp = 0 bmp = 0
if not devs: if not devs:
if test == True:
return
print "No DFU devices found!" print "No DFU devices found!"
exit(-1) exit(-1)
@ -91,9 +93,13 @@ def stm32_scan(args):
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30) man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
if man == "Black Sphere Technologies": bmp = bmp + 1 if man == "Black Sphere Technologies": bmp = bmp + 1
if bmp == 0 : if bmp == 0 :
if test == True:
return
print "No compatible device found\n" print "No compatible device found\n"
exit(-1) exit(-1)
if bmp > 1 and not args.serial_target : if bmp > 1 and not args.serial_target :
if test == True:
return
print "Found multiple devices:\n" print "Found multiple devices:\n"
for dev in devs: for dev in devs:
dfudev = dfu.dfu_device(*dev) dfudev = dfu.dfu_device(*dev)
@ -138,7 +144,7 @@ if __name__ == "__main__":
parser.add_argument("-a", "--address", help="Start address for firmware") parser.add_argument("-a", "--address", help="Start address for firmware")
parser.add_argument("-m", "--manifest", help="Start application, if in DFU mode", action='store_true') parser.add_argument("-m", "--manifest", help="Start application, if in DFU mode", action='store_true')
args = parser.parse_args() args = parser.parse_args()
dfudev = stm32_scan(args) dfudev = stm32_scan(args, False)
try: try:
state = dfudev.get_state() state = dfudev.get_state()
except: except:
@ -153,7 +159,7 @@ if __name__ == "__main__":
while True : while True :
sleep(0.5) sleep(0.5)
timeout = timeout + 0.5 timeout = timeout + 0.5
dfudev = stm32_scan(args) dfudev = stm32_scan(args, True)
if dfudev: break if dfudev: break
if timeout > 5 : if timeout > 5 :
print "Error: DFU device did not appear" print "Error: DFU device did not appear"

View File

@ -62,7 +62,7 @@ void platform_init(void)
scb_reset_core(); scb_reset_core();
} }
rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_48MHZ]); rcc_clock_setup_hse_3v3(&rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_48MHZ]);
/* Enable peripherals */ /* Enable peripherals */
rcc_periph_clock_enable(RCC_OTGFS); rcc_periph_clock_enable(RCC_OTGFS);

View File

@ -46,7 +46,7 @@ void platform_init(void)
scb_reset_core(); scb_reset_core();
} }
rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_48MHZ]); rcc_clock_setup_hse_3v3(&rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_48MHZ]);
/* Enable peripherals */ /* Enable peripherals */
rcc_peripheral_enable_clock(&RCC_AHB2ENR, RCC_AHB2ENR_OTGFSEN); rcc_peripheral_enable_clock(&RCC_AHB2ENR, RCC_AHB2ENR_OTGFSEN);
@ -103,4 +103,3 @@ void platform_request_boot(void)
SYSCFG_MEMRM &= ~3; SYSCFG_MEMRM &= ~3;
SYSCFG_MEMRM |= 1; SYSCFG_MEMRM |= 1;
} }

View File

@ -173,6 +173,8 @@ jtagtap_tdi_tdo_seq(uint8_t *DO, const uint8_t final_tms, const uint8_t *DI, int
/*if(rsize) printf("%02X ", tmp[index]);*/ /*if(rsize) printf("%02X ", tmp[index]);*/
*DO++ = tmp[index++]; *DO++ = tmp[index++];
} }
if (rticks == 0)
*DO++ = 0;
if(final_tms) { if(final_tms) {
rticks++; rticks++;
*(--DO) >>= 1; *(--DO) >>= 1;

View File

@ -222,7 +222,7 @@ static void adc_init(void)
gpio_set_mode(GPIOB, GPIO_MODE_INPUT, gpio_set_mode(GPIOB, GPIO_MODE_INPUT,
GPIO_CNF_INPUT_ANALOG, GPIO0); GPIO_CNF_INPUT_ANALOG, GPIO0);
adc_off(ADC1); adc_power_off(ADC1);
adc_disable_scan_mode(ADC1); adc_disable_scan_mode(ADC1);
adc_set_single_conversion_mode(ADC1); adc_set_single_conversion_mode(ADC1);
adc_disable_external_trigger_regular(ADC1); adc_disable_external_trigger_regular(ADC1);
@ -236,7 +236,7 @@ static void adc_init(void)
__asm__("nop"); __asm__("nop");
adc_reset_calibration(ADC1); adc_reset_calibration(ADC1);
adc_calibration(ADC1); adc_calibrate(ADC1);
} }
const char *platform_target_voltage(void) const char *platform_target_voltage(void)

View File

@ -128,7 +128,7 @@
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN); \ GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN); \
} while(0) } while(0)
#define USB_DRIVER stm32f103_usb_driver #define USB_DRIVER st_usbfs_v1_usb_driver
#define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ #define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ
#define USB_ISR usb_lp_can_rx0_isr #define USB_ISR usb_lp_can_rx0_isr
/* Interrupt priorities. Low numbers are high priority. /* Interrupt priorities. Low numbers are high priority.

View File

@ -60,7 +60,7 @@ int main(void)
gpio_set_mode(LED_PORT, GPIO_MODE_OUTPUT_2_MHZ, gpio_set_mode(LED_PORT, GPIO_MODE_OUTPUT_2_MHZ,
GPIO_CNF_OUTPUT_PUSHPULL, LED_0 | LED_1 | LED_2); GPIO_CNF_OUTPUT_PUSHPULL, LED_0 | LED_1 | LED_2);
dfu_init(&stm32f103_usb_driver, DFU_MODE); dfu_init(&st_usbfs_v1_usb_driver, DFU_MODE);
/* Configure the USB pull up pin. */ /* Configure the USB pull up pin. */
gpio_set(GPIOA, GPIO8); gpio_set(GPIOA, GPIO8);

View File

@ -58,7 +58,7 @@ int main(void)
if (rev > 1) /* Reconnect USB */ if (rev > 1) /* Reconnect USB */
gpio_set(GPIOA, GPIO15); gpio_set(GPIOA, GPIO15);
dfu_init(&stm32f103_usb_driver, UPD_MODE); dfu_init(&st_usbfs_v1_usb_driver, UPD_MODE);
dfu_main(); dfu_main();
} }

View File

@ -82,7 +82,7 @@
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \ gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN); GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN);
#define USB_DRIVER stm32f103_usb_driver #define USB_DRIVER st_usbfs_v1_usb_driver
#define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ #define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ
#define USB_ISR usb_lp_can_rx0_isr #define USB_ISR usb_lp_can_rx0_isr
/* Interrupt priorities. Low numbers are high priority. /* Interrupt priorities. Low numbers are high priority.

View File

@ -75,7 +75,7 @@ uint32_t detect_rev(void)
rev = 1; rev = 1;
/* On Rev > 0 unconditionally activate MCO on PORTA8 with HSE! */ /* On Rev > 0 unconditionally activate MCO on PORTA8 with HSE! */
RCC_CFGR &= ~(0xf << 24); RCC_CFGR &= ~(0xf << 24);
RCC_CFGR |= (RCC_CFGR_MCO_HSECLK << 24); RCC_CFGR |= (RCC_CFGR_MCO_HSE << 24);
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO8); GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO8);
} }

View File

@ -75,7 +75,7 @@ int main(void)
if (rev > 1) if (rev > 1)
gpio_set(GPIOA, GPIO15); gpio_set(GPIOA, GPIO15);
dfu_init(&stm32f103_usb_driver, DFU_MODE); dfu_init(&st_usbfs_v1_usb_driver, DFU_MODE);
dfu_main(); dfu_main();
} }

View File

@ -59,7 +59,7 @@ void traceswo_init(void)
timer_ic_set_polarity(TRACE_TIM, TIM_IC2, TIM_IC_FALLING); timer_ic_set_polarity(TRACE_TIM, TIM_IC2, TIM_IC_FALLING);
/* Trigger on Filtered Timer Input 1 (TI1FP1) */ /* Trigger on Filtered Timer Input 1 (TI1FP1) */
timer_slave_set_trigger(TRACE_TIM, TIM_SMCR_TS_IT1FP1); timer_slave_set_trigger(TRACE_TIM, TIM_SMCR_TS_TI1FP1);
/* Slave reset mode: reset counter on trigger */ /* Slave reset mode: reset counter on trigger */
timer_slave_set_mode(TRACE_TIM, TIM_SMCR_SMS_RM); timer_slave_set_mode(TRACE_TIM, TIM_SMCR_SMS_RM);

View File

@ -72,7 +72,7 @@ void usbuart_init(void)
timer_set_mode(USBUSART_TIM, TIM_CR1_CKD_CK_INT, timer_set_mode(USBUSART_TIM, TIM_CR1_CKD_CK_INT,
TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);
timer_set_prescaler(USBUSART_TIM, timer_set_prescaler(USBUSART_TIM,
rcc_ppre2_frequency / USBUART_TIMER_FREQ_HZ * 2 - 1); rcc_apb2_frequency / USBUART_TIMER_FREQ_HZ * 2 - 1);
timer_set_period(USBUSART_TIM, timer_set_period(USBUSART_TIM,
USBUART_TIMER_FREQ_HZ / USBUART_RUN_FREQ_HZ - 1); USBUART_TIMER_FREQ_HZ / USBUART_RUN_FREQ_HZ - 1);

View File

@ -74,7 +74,7 @@
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN); \ GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN); \
} while (0) } while (0)
#define USB_DRIVER stm32f103_usb_driver #define USB_DRIVER st_usbfs_v1_usb_driver
#define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ #define USB_IRQ NVIC_USB_LP_CAN_RX0_IRQ
#define USB_ISR usb_lp_can_rx0_isr #define USB_ISR usb_lp_can_rx0_isr
/* Interrupt priorities. Low numbers are high priority. /* Interrupt priorities. Low numbers are high priority.

View File

@ -83,7 +83,7 @@ int main(void)
systick_interrupt_enable(); systick_interrupt_enable();
systick_counter_enable(); systick_counter_enable();
dfu_init(&stm32f103_usb_driver, DFU_MODE); dfu_init(&st_usbfs_v1_usb_driver, DFU_MODE);
dfu_main(); dfu_main();
} }

View File

@ -199,7 +199,8 @@ int target_flash_erase(target *t, target_addr addr, size_t len)
int ret = 0; int ret = 0;
while (len) { while (len) {
struct target_flash *f = flash_for_addr(t, addr); struct target_flash *f = flash_for_addr(t, addr);
size_t tmplen = MIN(len, f->length - (addr % f->length)); size_t tmptarget = MIN(addr + len, f->start + f->length);
size_t tmplen = tmptarget - addr;
ret |= f->erase(f, addr, tmplen); ret |= f->erase(f, addr, tmplen);
addr += tmplen; addr += tmplen;
len -= tmplen; len -= tmplen;
@ -213,16 +214,18 @@ int target_flash_write(target *t,
int ret = 0; int ret = 0;
while (len) { while (len) {
struct target_flash *f = flash_for_addr(t, dest); struct target_flash *f = flash_for_addr(t, dest);
size_t tmplen = MIN(len, f->length - (dest % f->length)); size_t tmptarget = MIN(dest + len, f->start + f->length);
size_t tmplen = tmptarget - dest;
if (f->align > 1) { if (f->align > 1) {
uint32_t offset = dest % f->align; uint32_t offset = dest % f->align;
uint8_t data[ALIGN(offset + len, f->align)]; uint8_t data[ALIGN(offset + tmplen, f->align)];
memset(data, f->erased, sizeof(data)); memset(data, f->erased, sizeof(data));
memcpy((uint8_t *)data + offset, src, len); memcpy((uint8_t *)data + offset, src, tmplen);
ret |= f->write(f, dest - offset, data, sizeof(data)); ret |= f->write(f, dest - offset, data, sizeof(data));
} else { } else {
ret |= f->write(f, dest, src, tmplen); ret |= f->write(f, dest, src, tmplen);
} }
dest += tmplen;
src += tmplen; src += tmplen;
len -= tmplen; len -= tmplen;
} }