#ifndef _shared_dict_bootload_h #define _shared_dict_bootload_h //define dictionary's reference number in the shared_dictionaries.h file //then include this dictionary file in shared_dictionaries.h //The dictionary number is literally used as usb transfer request field //the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields //============================================================================================= //============================================================================================= // BOOTLOAD DICTIONARY // // opcodes contained in this dictionary must be implemented in firmware/source/bootload.c // these opcodes are currently only defined for STM32 devices // AVR devices use their own dedicated & entirely separate bootloader handled via switch // //============================================================================================= //============================================================================================= //BOOTLOAD opcodes //could never get this to work so just going to cut it out //#define JUMP_BL 1 //jump to the bootloader #define LOAD_ADDRH 2 //upper address half word used for various functions #define JUMP_ADDR 3 //jump to address upper 16bit provided previous opcode #define PREP_FWUPDATE 4 //leave main application and sets up for fwupdate // POINTER READ/WRITE ACCESS // With great power comes great responsibility // these opcodes perform direct read/write access of the STM32 address space // you can litterally read/write any address // accessing restricted areas will cause hardfaults // don't think it's really possible to brick the device using any of these // worst case you could corrupt flash if you halfway know what you're doing // so long as you don't mess up the option bytes to disable the BOOT pin // you'll be able to recover the device using bootloader jumper/switch // via stmicro dfuse demo // this could actually be pretty handy for mcu debugging. // allowing for reading of registers, memory, etc between dictionary calls // // TODO for this use including AVR support is actually a good idea // but need to be extra careful there as bricking an AVR could // permanently brick it to where not even an AVR programmer could save it // atleast the mcu socketed.. Bricking it would be difficult to do accidentally. // More of a concern if one were tinkering with fuses and such. // Don't feel like learning the AVR memory map enough to add this support // at the moment. Perhaps much of the ARM code will compile and work fine // on the AVR..? //operand provides 16bit value for RD/WR commands below #define SET_PTR_HI 5 #define SET_PTR_LO 6 #define GET_PTR 7 //RL=6 //ALL OFFSETS ARE INTERPRETED AT POSITIVE UNSIGNED! //read 16bit value from memory location being pointed to //operand provides offset from current pointer, but doesn't modify the pointer #define RD_PTR_OFFSET 8 //RL=4 0-error, 1-len, 2-LSB, 3-MSB //operand provides 16bit value to be written, miscdata provides offset #define WR_PTR_OFFSET 9 //operand provides 16bit offset which is added to ptr before access //then reads from that address #define RD_PTR_OFF_UP 10 //RL=4 0-error, 1-len, 2-LSB, 3-MSB //miscdata provide 8bit offset which is added to ptr before access //operand is the 16bit value which is written to memory location being pointed to #define WR_PTR_OFF_UP 11 //application code version //this is updated more frequently than the USB firmware version //#define GET_APP_VER 12 //RL=3 0-error, 1-len, 2-version //just set pointer to 0x08000800 and read 4 bytes for now //APPLICATION VERSION NUMBERS //#define APP_VERSION "AV00" //released with usb firmware v2.3 //main update was addition of usb firmware updater //also added the bootloader pointer memory access //include ram functions & starting to have NES flash algos return data #endif