From 56b6107fa4f059cee2f9b466442ecc5879652d60 Mon Sep 17 00:00:00 2001 From: Ake Hedman Date: Sun, 19 Jan 2025 17:40:32 +0100 Subject: [PATCH] Added bootloader abort events --- class1.measurement.md | 2 +- class1.measurement32.md | 2 +- class1.measurement64.md | 2 +- class1.measurezone.md | 2 +- class1.protocol.md | 51 ++++++++++++++ class1.setvaluezone.md | 2 +- class2.level1.measurement.md | 2 +- class2.level1.measurement32.md | 2 +- class2.level1.measurement64.md | 2 +- class2.level1.measurezone.md | 2 +- class2.level1.protocol.md | 63 ++++++++++++++++++ class2.level1.setvaluezone.md | 2 +- class2.measurement_float.md | 2 +- class2.measurement_str.md | 2 +- images/vscp_std_bootloader_algorithm.png | Bin 0 -> 43664 bytes .../vscp_std_bootloader_algorithm_detail.png | Bin 0 -> 63068 bytes variables.xml | 4 +- vscp_boot_loader_algorithm.md | 30 +++++---- vscp_specification_history.md | 1 + 19 files changed, 145 insertions(+), 28 deletions(-) create mode 100644 images/vscp_std_bootloader_algorithm.png create mode 100644 images/vscp_std_bootloader_algorithm_detail.png diff --git a/class1.measurement.md b/class1.measurement.md index eedd822..4a6ee4b 100644 --- a/class1.measurement.md +++ b/class1.measurement.md @@ -454,7 +454,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class1.measurement32.md b/class1.measurement32.md index 7e8f671..c502372 100644 --- a/class1.measurement32.md +++ b/class1.measurement32.md @@ -567,7 +567,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class1.measurement64.md b/class1.measurement64.md index eeaf0e1..f6d855c 100644 --- a/class1.measurement64.md +++ b/class1.measurement64.md @@ -569,7 +569,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class1.measurezone.md b/class1.measurezone.md index c868b0f..06acdbd 100644 --- a/class1.measurezone.md +++ b/class1.measurezone.md @@ -561,7 +561,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class1.protocol.md b/class1.protocol.md index 9b93451..8a6b8ad 100644 --- a/class1.protocol.md +++ b/class1.protocol.md @@ -1226,6 +1226,57 @@ Part of the VSCP boot-loader functionality. This event is a way to check if a de **This event was added in version 1.15.0 so we aware that older devices may not support this event.** +---- + +## Type=55 (0x37) - Bootloader abort :id=type55 +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event provide a way to leave the bootloader in a secure fashion if there is problems loading firmware to a device. It is only available if the device has a bootloader that supports this functionality. Typically this is a device that has several firmware slots and can switch between them, and by that switch back to the last known working firmware. + +The event can be sent in all states of the bootloading procedure. + +[CLASS1.PROTOCOL, Type=56 (Bootloader abort ACK)](./class1.protocol.md#type56) should be sent as a positive response to a bootloader exit or rollback + +[CLASS1.PROTOCOL, Type=57 (Bootloader abort NACK)](./class1.protocol.md#type57) should be sent as a negative response to a bootloader exit or rollback + + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + +---- + +## Type=56 (0x38) - Bootloader abort ACK :id=type56 +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT_ACK +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event is a positive response to a bootloader abort or rollback [CLASS1.PROTOCOL, Type=55 (Bootloader abort)](./class1.protocol.md#type55). + +Event is sent before execution of the new firmware starts. It is used to tell the controlling device that the device is ready to leave the bootloader mode and start the new firmware. + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + +---- + +## Type=57 (0x39) - Bootloader abort NACK :id=type57 +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT_NACK +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event is a negative response to a bootloader abort or rollback [CLASS1.PROTOCOL, Type=55 (Bootloader abort)](./class1.protocol.md#type55). + +Om a single slot firmware device where a firmware update has failed and there is no working firmware to switch back to this event should be sent to tell the controlling device that we can't leave the bootloader mode until a new full firmware has been loaded. + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + + ---- [filename](./bottom_copyright.md ':include') \ No newline at end of file diff --git a/class1.setvaluezone.md b/class1.setvaluezone.md index b861d41..bae44ef 100644 --- a/class1.setvaluezone.md +++ b/class1.setvaluezone.md @@ -564,7 +564,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.level1.measurement.md b/class2.level1.measurement.md index cbdb669..d9e6abf 100644 --- a/class2.level1.measurement.md +++ b/class2.level1.measurement.md @@ -552,7 +552,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.level1.measurement32.md b/class2.level1.measurement32.md index 7bdf4d5..47b52ab 100644 --- a/class2.level1.measurement32.md +++ b/class2.level1.measurement32.md @@ -553,7 +553,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.level1.measurement64.md b/class2.level1.measurement64.md index bde0d48..e1d7a5e 100644 --- a/class2.level1.measurement64.md +++ b/class2.level1.measurement64.md @@ -553,7 +553,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.level1.measurezone.md b/class2.level1.measurezone.md index be7945c..34f9533 100644 --- a/class2.level1.measurezone.md +++ b/class2.level1.measurezone.md @@ -553,7 +553,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.level1.protocol.md b/class2.level1.protocol.md index 4414d66..302933a 100644 --- a/class2.level1.protocol.md +++ b/class2.level1.protocol.md @@ -1476,6 +1476,69 @@ Part of the VSCP boot-loader functionality. This event is a way to check if a de +---- + + +## Type=55 (0x37) - Bootloader abort :id=type55 + +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event provide a way to leave the bootloader in a secure fashion if there is problems loading firmware to a device. It is only available if the device has a bootloader that supports this functionality. Typically this is a device that has several firmware slots and can switch between them, and by that switch back to the last known working firmware. + +The event can be sent in all states of the bootloading procedure. + +[CLASS1.PROTOCOL, Type=56 (Bootloader abort ACK)](./class1.protocol.md#type56) should be sent as a positive response to a bootloader exit or rollback + +[CLASS1.PROTOCOL, Type=57 (Bootloader abort NACK)](./class1.protocol.md#type57) should be sent as a negative response to a bootloader exit or rollback + + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + + + +---- + + +## Type=56 (0x38) - Bootloader abort ACK :id=type56 + +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT_ACK +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event is a positive response to a bootloader abort or rollback [CLASS1.PROTOCOL, Type=55 (Bootloader abort)](./class1.protocol.md#type55). + +Event is sent before execution of the new firmware starts. It is used to tell the controlling device that the device is ready to leave the bootloader mode and start the new firmware. + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + + + +---- + + +## Type=57 (0x39) - Bootloader abort NACK :id=type57 + +``` +VSCP_TYPE_PROTOCOL_BOOT_LOADER_ABORT_NACK +``` +**Not mandatory** Only needed if a VSCP boot loader algorithm is used. + +Part of the VSCP boot-loader functionality. This event is a negative response to a bootloader abort or rollback [CLASS1.PROTOCOL, Type=55 (Bootloader abort)](./class1.protocol.md#type55). + +Om a single slot firmware device where a firmware update has failed and there is no working firmware to switch back to this event should be sent to tell the controlling device that we can't leave the bootloader mode until a new full firmware has been loaded. + +**This event was added in version 1.15.10 so we aware that older devices may not support this event.** + + + + + ---- diff --git a/class2.level1.setvaluezone.md b/class2.level1.setvaluezone.md index 38741a9..04916fe 100644 --- a/class2.level1.setvaluezone.md +++ b/class2.level1.setvaluezone.md @@ -553,7 +553,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.measurement_float.md b/class2.measurement_float.md index 4584e7b..d4d821a 100644 --- a/class2.measurement_float.md +++ b/class2.measurement_float.md @@ -568,7 +568,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/class2.measurement_str.md b/class2.measurement_str.md index 380e578..f8744f0 100644 --- a/class2.measurement_str.md +++ b/class2.measurement_str.md @@ -569,7 +569,7 @@ This is a measurement of a speed. ``` VSCP_TYPE_MEASUREMENT_ACCELERATION ``` -**Default unit:** Metre per second squared (m/s2). +**Default unit:** Metre per second squared (m/s²). This is a measurement of acceleration. diff --git a/images/vscp_std_bootloader_algorithm.png b/images/vscp_std_bootloader_algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..a2094e64ee5e0ae029b89864f38e2f016afea639 GIT binary patch literal 43664 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 literal 0 HcmV?d00001 diff --git a/images/vscp_std_bootloader_algorithm_detail.png b/images/vscp_std_bootloader_algorithm_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..f1c6c5a940bf78c229e9c11a2d4d3867678bd51b GIT binary patch literal 63068 zcmbq*bzGEP+bt#1DP0oMF@lt&q|zlFLwC0z3?U#XN~eI7l(d8}(kUPUQqtX^gw)xC z&-1>|`~A-MJLfycKV+DDxM$Da*S@ZGt+n>NR8x`1#iGPQLPElQ@>oU#2?^yc64I>? z7%1SGEq2E+@Ppk$R@cMa*~Qnv(#iu#-qOj^&D6uv;;xzRT^kP%7x#xeJT4BVP9C0) z4&3I>j$U8-=#Y?5i*2=ZJ^p?k2^rkSC!RT5prdsQz zq1iRam+0;oYS1whEyB)3uOifIx~7rhBa0gz9;)8G(6t^>{cWE{ipYbNAzp0-Dpj_G zUi3of;yvfpx9IbGFPx=pHXp=f=spY7C;UpYD#zp}?Jb0pejB2F)hdrgp%rm({$`4U zz}qeF%^N3gM^ED^)jYC%o!8Y3g6Rr0pI{_`gs;rVPrUK9C{Av4eC>s09Gi)CPqP(@RuKU)ZNaCp@cJzj(u=sD(z5{Jo*kSU9oWiK-a)k9> zNqqy~C2F_#{0GOo9!qc$_1yIq;8MKfke1}jIuJ?6bv8aP|4@a=`+}r8u*k#r$C|7v z^61Qa9y~r}A|vQa(&A^fXqu>F3jMylqiIR676tc>*0A+te-t-ZG_S*l6Uyi(TG98T zux^KwT1_>JylH0FO=$ky-)}gDWon=6P;#vglk_i|nsF&-??}Mmh+(-SL?|e9&h)-t zCV~0qCpPrgUbQ(`N2~^H;)S|WSCul-?Q2Fq+Ppi{1yna#g-XY*siM2qvmgKRYD^~( zY+Q`we^Xeavzt%0L}1(M8*#YiusX85JhJn%Y@H+Uyv%7fcrA76MY2^COiVt#FFcpT zud>jcU8{m??A6mxmjc53bd+S5oM9p5j~3f|35n`jV)e@ubv<{U$W+=S#=o)SH+U)* zsK8L4l&xRmX=F1~F6%M55<1^|ublfX z(jPdhpL*jd9KjsW@yr*thQ%ps-UEnpH9Vf&#`ap`T$+3bMGhx4MV`0dYq z!)VoG#b(MU9gXdqrds7&Y-Vj+eDs1udo}oP?BR|2IV9A_zi(ewe9HTDE{m1yj}_iM zEJ5xsMovxLZsU(1&>(%>GH1wh4)wHSz*Ew-?s(w2o+Dkp{<_Waz5i_-`1N#Cw#U3v zMqo$Oz6N=jSvhsXvkZ&$`EW1qmtLkvkFg9xyD=N)`OL{_a9&pWaOWnA;x6^j-D!p`8ypIiG27m}$7S z-d*GO-W7GPXi!qWBdcya%)gBinadgp%VCYo#UTIJLspb9@GJuqJp1S2KQI1y-9Ik= zdH8>IlRjdyAcZOEmhaSC1Sg00-tDx|H|d(YS+%C0>xhOLd>r=~a|QHx=6j50TGUj7SdS$Rc;yeh*` zXB3&BfPh`~RK2r_jZIN&YoL?UZoXo&#Yb8GfvKV`!7WYa>ij#%(u5FhBsrU3n`3g= z*wT5w7~7J#4A6q+yOkT8pOSs>J)X2)2>�g+gVgZK$XiRW9>{Q3pAXWT0NCCh$6- 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%0DPi>csqg`4p_@TO=&dm$vKlr!URE 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 - 2025-01-13 11:26:00 - 1.15.9 + 2025-01-19 17:31:00 + 1.15.10 diff --git a/vscp_boot_loader_algorithm.md b/vscp_boot_loader_algorithm.md index 9b7b2cc..7b3053d 100644 --- a/vscp_boot_loader_algorithm.md +++ b/vscp_boot_loader_algorithm.md @@ -20,22 +20,24 @@ Most flash devices are programmed block by block. The boot loader algorithm must The boot loader sequence is as follows: -* **master** - device that initiate boot loading process and uploads firmware -* **node** - Device that will get it's firmware updated. - 1. The master instructs the node to enter boot loader mode by sending an [enter boot loader mode](./class1.protocol.md#type12) event to the node. This event have information on which boot loader method that is expected by the master. This can be the VSCP boot loader which is described here or another boot loader. __If this event is received in an stage below the boot loading process should be restarted.__ - 2. The node confirms that it is ready for code loading with the requested boot loader algorithm by sending the [ACK boot loader mode](./class1.protocol.md#type13) event. Block size and number of blocks are sent as arguments in the acknowledge event. The node respond with [NACK boot loader mode event](./class1.protocol.md#type14) if it can't handle the requested boot loader algorithm or because of some other reason cant initiate the boot loading process. - 3. The master sends a [start block data transfer](./class1.protocol.md#type15) event to specify which block should be programmed and by that initiating the transfer of data for the block. - 4. The node confirms block transfer by sending an [ACK data block](./class1.protocol.md#type17) event. - 5. The master sends one or several [block data](./class1.protocol.md#type16) events until the complete block is transferred. - 6. When all data for a block is received by a node it sends a [block ACK](./class1.protocol.md#type17) event to acknowledge the reception of a complete block. - 7. The master now sends a program block event to the node to make it write the block buffer into flash memory. - 8. The node confirms the block programming by responding with an [ACK program block](./class1.protocol.md#type20) event. - 9. The next block is handled or the node is taken out of the boot loader mode by sending a [drop nickname/reset device](./class1.protocol.md#type8) event. - 10. To activate the new program code the master sends an [activate new image](./class1.protocol.md#type22) event with the 16 bit CRC for the full new firmware as an argument. The new node should come up after reboot. The 16-bit CCITT CRC is used. [One activate new image ACK](./class1.protocol.md#type48) event is set if this happens if something is wrong an [activate new image NACK](./class1.protocol.md#type48) event is sent. +* **controller** - device that initiate boot loading process and uploads firmware +* **device** - Device that will get it's firmware updated. + 1. The controller instructs the device to enter boot loader mode by sending an [enter boot loader mode](./class1.protocol.md#type12) event to the device. This event have information on which boot loader method that is expected by the controller. This can be the VSCP boot loader which is described here or another boot loader. __If this event is received in an stage below the boot loading process should be restarted.__ + 2. The device confirms that it is ready for code loading with the requested boot loader algorithm by sending the [ACK boot loader mode](./class1.protocol.md#type13) event. Block size and number of blocks are sent as arguments in the acknowledge event. The device respond with [NACK boot loader mode event](./class1.protocol.md#type14) if it can't handle the requested boot loader algorithm or because of some other reason cant initiate the boot loading process. + 3. The controller sends a [start block data transfer](./class1.protocol.md#type15) event to specify which block should be programmed and by that initiating the transfer of data for the block. + 4. The device confirms block transfer by sending an [ACK data block](./class1.protocol.md#type17) event. + 5. The controller sends one or several [block data](./class1.protocol.md#type16) events until the complete block is transferred. + 6. When all data for a block is received by a device it sends a [block ACK](./class1.protocol.md#type17) event to acknowledge the reception of a complete block. + 7. The controller now sends a program block event to the device to make it write the block buffer into flash memory. + 8. The device confirms the block programming by responding with an [ACK program block](./class1.protocol.md#type20) event. + 9. The next block is handled or the device is taken out of the boot loader mode by sending a [drop nickname/reset device](./class1.protocol.md#type8) event. + 10. To activate the new program code the controller sends an [activate new image](./class1.protocol.md#type22) event with the 16 bit CRC for the full new firmware as an argument. The new device should come up after reboot. The 16-bit CCITT CRC is used. [One activate new image ACK](./class1.protocol.md#type48) event is set if this happens if something is wrong an [activate new image NACK](./class1.protocol.md#type48) event is sent. The boot-loader is built to direct control flash if other methods such as intermediate storage is used. Data can be loaded direct and program block can just get a dummy ACK. -![Firmware update procedure](./images/vscp_std_boot_loader_algorithm.png) +The controller can always abort the bootloader process by sending a [bootloader abort](./class1.protocol.md#type55) event. If the device accept it or not depends if the device can switch to a working firmware or not. Doing this usualy requires the device to have a dual (or more) firmware setup. + +![Firmware update procedure](./images/vscp_std_bootloader_algorithm.png) Diagram by **Andreas Merkle** #### Type of memory to write (byte 4) @@ -44,7 +46,7 @@ This is the currently defined memory types that can be used. | Memory type | Description | | :-----------: | ----------- | - | 0 or byte absent | PROGRAM Flash (status quo for old nodes) | + | 0 or byte absent | PROGRAM Flash (status quo for old devices) | | 1 | DATA (EEPROM, MRAM, FRAM) | | 2 | CONFIG (CPU configuration) | | 3 | RAM | diff --git a/vscp_specification_history.md b/vscp_specification_history.md index d384f01..d5bae38 100644 --- a/vscp_specification_history.md +++ b/vscp_specification_history.md @@ -2,6 +2,7 @@ | Date | By | Description | | ---------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|2025-01-19| AKHE | Added bootloader abort events | |2025-01-13| AKHE | Misc updates/fixed for measurement units. [See](https://github.com/grodansparadis/vscp/discussions/279#discussioncomment-11796872) | |2025-01-09| AKHE | CLASS1.MEASUREMENT, type13/14 new units. Fixed faulty link. Fixed unit error. | |2025-01-07| AKHE | Added events CLASS1_CONTROL: VSCP_TYPE_CONTROL_TURN_ALL_OFF (17), VSCP_TYPE_CONTROL_TURN_ALL_ON (18) VSCP_TYPE_CONTROL_TURN_ALL_X (19) Fixes grodansparadis/vscp#278 |