diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2016-05-30 20:34:06 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2016-05-30 20:34:06 +0900 |
commit | 421fd8019b31386c6e689753cf0a2ff35bd2af50 (patch) | |
tree | 43461cc614a2153b036e9e163a46849927ee9e60 /mcu | |
parent | e8eaeced7741488bc83735ef81478d98b877470e (diff) |
; ABOUT-SYS
Diffstat (limited to 'mcu')
-rw-r--r-- | mcu/ABOUT-SYS | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/mcu/ABOUT-SYS b/mcu/ABOUT-SYS new file mode 100644 index 0000000..c5a7490 --- /dev/null +++ b/mcu/ABOUT-SYS @@ -0,0 +1,188 @@ +Consideration about SYS and the first pages of flash ROM +======================================================== + +Now, I'm developing something like SYS for Kinetis L MCU, so, I write +this document. + + +About SYS on STM32F103 +====================== + +In the development of Gnuk, we developed: + + SYS: The system predefined routines for STM32F103 + +It is now maintained as example-cdc/sys.c. + +There is another version in example-led/sys.c, which also support +STM32F030, as well as STM32F103. But, it wouldn't be useful for +STM32F030. In fact, the file example-fsm-55/sys.c has name sys.c +but it doesn't include any system routines. + +The original issue was: + + (1) When it's protected, STM32F103 can't change the first 4KiB of + flash ROM at run time. + + (2) We want to support firmware upgrade through its USB. + +Later on, we add another point. + + (3) It is good if the executable of Gnuk could be shared among + different boards. + +For (1) and (2), we decided put some useful routines and data which is +not need to be changed. + +Now, the first 4KiB of flash ROM consists of: + + 1KiB: SYS + 3KiB: 3/4 of AES forward tables + +SYS consists of: + + Internal: reset entry, end of RAM + Data: board identification + Routines: board specific + board independent + +and here is the list of all. + +* Internal routines + + reset entry + end of RAM + +* Board identification + + sys_version + sys_board_id + sys_board_name + +* Board specific routines + + * led + set_led + + * mcu/board lower level + clock_init + gpio_init + + * usb + usb_lld_sys_init + usb_lld_sys_shutdown + +* Board independent routines + + * flash ROM access routines + + unlock + write halfword + erase page + brank check + write page + protect + erase_all & exec to ram + + * system reset routine + + nvic_system_reset + +The routines of clock_init and gpio_init are here because of some +historical reasons. (We could design a system with no such exported +routines: by defining: those things done internally after reset and +before calling the application.) + +Those are exported as entries of SYS, and it is the responsibility of +the application which do initialize clock and GPIO, calling those +routines. + +USB routines are needed because of hardware practice of STM32F103. +With STM32F103, each board has different way for handling the pull up +of USB D+ and how the device asks re-enumeration to host PC. In my +opinion, if it's defined as full speed device and it's OK for us not +to use high impedance (but asserting to LOW, instead) of D+ to ask +re-enumeration, we can just pull up D+ always. And we wouldn't need +such routines in SYS. + + + +About SYS on Kinetis L +====================== + +For Kinetis L, because it's ROM has the original firmware upgrade +support by the vendor (though USB HID), all that we needed for +firmware upgrade would be just erasing to factory settings. + +And it has no limitation like STM32F103's first 4KiB flash ROM. +All pages can be updated at run time. + +Nevertheless, the first two pages (2KiB) of KL27Z is still difficult +to use. + +So, I decide to introduce something like SYS for Kinetis L. + + +* Layout + +Three pages (3KiB) usage: + + ------------ The first page + End of RAM <-- not used but hardware defines this + Address of reset entry + sys_version + sys_board_info (id, name) + sys_vector + + other SYS routines and data... + + ------------ The second page + FLASH CONFIG: 16-byte + Reset entry function + flash routines + CRC-32 routines + CRC-32 table (768-byte of CRC-32 table) + + ------------ The third page + MAGIC 256-byte (256-byte of the last part of CRC-32 table) + ... + vectors (initial MSP, reset, ...) + ... + + +* data: Board identification + + sys_version + sys_board_id + sys_board_name ; null terminated + +* Board specific routines + + * mcu/board lower level + clock_init + gpio_init + + * led + set_led + +* data: Board independent routines + + * flash ROM access code to be loaded on to RAM + +* system reset routine??? + + nvic_system_reset + + +* data: vectors for routines and data + sys_version + sys_board_id + address of sys_board_name + address of set_led + address of clock_init + address of gpio_init + address of ... + + + +-- |