61 Commits

Author SHA1 Message Date
Eric Callahan
047003bf12 canboot_main: switch to little-endian
Simplify the NACK to a single command.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
6199e9d107 canboot_main: remove process_state() method
Commands are now executed after decoding, so there is no need to
track any state other than complete.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
9762327ac3 protocol: add protocol documentation
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
c9d326928c flash_can: update to support new protocol
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
54dce642f6 canboot_main: rework the protocol
All commands are now framed, where the payload  must
always be included within a frame.  A 16-bit CRC is postfixed
to each frame for validation.  The protocol is now as follows:

 <16-bit header><8-bit command><8-bit payload length in words><payload><16-bit trailer><16-bit CRC>

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
011d3a8f45 generic: add crc16 from klipper
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Eric Callahan
849b81dce5 led: introduce a short delay before reading initial time
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-05-09 17:12:24 -04:00
Kevin O'Connor
a84b354cee canboot_main: Change double reset time from 2 seconds to 500ms
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 15:18:07 -04:00
Kevin O'Connor
66c9853929 canboot_main: Add support for entering the bootloader on a button press
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 15:18:07 -04:00
Kevin O'Connor
ce580fa8c6 canboot_main: Make entry via double reset a config option
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 15:18:07 -04:00
Kevin O'Connor
807c1ef0bd led: Move led code to new led.c file
Move the led c code from the buildcommands.py to a new led.c file.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 15:18:07 -04:00
Kevin O'Connor
5279c33ea0 flash: Autodetect stm32f103 flash page size
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 14:06:43 -04:00
Kevin O'Connor
00a65c1570 Makefile: Resync main makefile with Klipper's main makefile
The latest Klipper main Makefile has bugfixes for proper rebuilding on
a change during "make menuconfig".

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 12:28:44 -04:00
Kevin O'Connor
9c6e72e3a5 armcm_boot: Introduce cross-platform boot to application code
It's a good idea to reset the cpu before starting the main application
code.  However it is difficult to reliably reset the cpu in software.

This changes the software to actually do a cpu hardware reset prior to
launching the main application - after each bootup the code checks to
see if the application should be started before entering the main
bootloader code.  This helps ensure the application code is started in
a "pristine" cpu state.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:32:21 -04:00
Kevin O'Connor
726e6e62fa armcm_boot: No need to reset cpu state on bootup
The bootloader is only called after a reset - it doesn't need to worry
about another bootloader launching it.  This reduces the code size by
a small amount.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:32:21 -04:00
Kevin O'Connor
23f3c0e1e2 armcm_boot: Add get/set_bootup_code() helper functions
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:32:21 -04:00
Kevin O'Connor
34e14386ed Makefile: Build with -Os instead of -O2
Build size is likely more important than CPU performance for a
bootloader.  So, instruct gcc to optimize for size by default.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:23:45 -04:00
Kevin O'Connor
da0f92f721 README: Use Klipper3d github http address
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:23:15 -04:00
Kevin O'Connor
794ccd69c0 canbus: Use Klipper's nodeid to canbus_id scheme
Use Klipper's nodeid to canbus_id scheme (canbus_id = nodeid * 2 +
0x100).  Instead, use a nodeid offset of 128 to avoid collisions with
Klipper.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2022-05-05 05:22:55 -04:00
Eric Callahan
95e8a707ca
flash_can: attempt to reset the mcu if an error is encountered
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-26 12:12:46 -04:00
Eric Callahan
c5163674ed
src: remove references to the magic key
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-26 08:26:45 -04:00
Eric Callahan
76474d6efd
flash_can: update for latest changes
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-26 08:20:24 -04:00
Eric Callahan
76b1de0574
canbus: send the node ID command in the query response
This is use to identify the application

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-26 08:12:13 -04:00
Eric Callahan
e2c58fb6a6
arm: make sure the signature is aligned
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-26 08:04:04 -04:00
Eric Callahan
b5303fa5f7
flash_can: fix error in uuid reporting
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 20:06:57 -04:00
Eric Callahan
f0d7bb7f9c
flash_can: add retries to verification
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 17:18:35 -04:00
Eric Callahan
f754ae2746
flash_can: update for latest changes
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 17:14:02 -04:00
Eric Callahan
6351e2b1be
canbus: use Klipper's admin ids
Rather than use different admin IDs from Klipper, use different commands.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 17:14:02 -04:00
Eric Callahan
b944d094b3
arm: add canboot signature to request handler
Implement through inline assembly as recommended by Kevin O'Connor.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 15:26:02 -04:00
Eric Callahan
9b4c95ee9a
canboot: improve bootloader request method
Use a cross platform request signature to enter the
bootloader.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 14:20:42 -04:00
Eric Callahan
3541dd1f2f
.gitignore: add build files
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-25 13:45:45 -04:00
Eric Callahan
b6572909b2
readme: suggest a full chip erase
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-17 19:29:58 -04:00
Eric Callahan
8313f425d0
readme: add clarification to notes
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-15 08:05:20 -04:00
Eric Callahan
65667f8516
readme: clarify flash page size
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 17:27:15 -04:00
Eric Callahan
b5ff2ce29b
kconfig: fix page size description
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 17:22:51 -04:00
Eric Callahan
2ac0f6be56
readme: add note about alternative methods of flashing
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 15:15:16 -04:00
Eric Callahan
c464b63a99
readme: note that stm32f0x2 devices are supported
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 14:13:36 -04:00
Eric Callahan
0f1bd588a8
kconfig: fix stm32f072 flash size
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 09:15:32 -04:00
Eric Callahan
3a29a4d0da
kconfig: disable stm32f4 choices
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 08:55:09 -04:00
Eric Callahan
9dc0f90d21
readme: add flash_can usage
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 08:21:59 -04:00
Eric Callahan
db1123d69d
flash_can: add query option
It is possible that a user will flash the bootloader before
ever having flashed Klipper.  In this case they would be
unable to supply a UUID.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-14 08:21:58 -04:00
Eric Callahan
0838d844e9
flash_can: make executable
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 19:34:50 -04:00
Eric Callahan
f42f6c5090
readme: update can docs
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 19:30:07 -04:00
Eric Callahan
a6afacea62
scripts: remove the canserial service files
This service is no longer necessary to communicate with
can devices running Klipper.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 18:25:54 -04:00
Eric Callahan
3686db10fd
flash_can: add interface argument
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 18:23:44 -04:00
Eric Callahan
abb966713e
canboot: fix typo
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 17:46:37 -04:00
Eric Callahan
9d894c7190
flash_can: bring module in line with latest mcu code
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 17:08:10 -04:00
Eric Callahan
1e79868003
canbus: add a clear node id admin command
This broadcasts a command to clear the id for all nodes running
the bootloader, which should prevent ID collisions.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-13 15:04:52 -04:00
Eric Callahan
26c89e8b0e
canboot: modify command bytes IDs
This is just to avoid confusion between RX_EOF and the command trailer.
Having both as 0x03 could potential lead to issues.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-12 14:18:22 -04:00
Eric Callahan
11e96a8f3e
canbus: remove get_node_id() method
This method isn't necessary as the bootloader shouldnt need to discover
multiple node ids.  Change the decoded node ID offset to 0x200 in an
effort to avoid collisions with nodes assigned by Klipper.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2022-04-12 14:16:17 -04:00