diff --git a/update.cpp b/update.cpp index 68942c3..e54b20c 100644 --- a/update.cpp +++ b/update.cpp @@ -386,17 +386,61 @@ bool Update::downloadBinaryToDC(QString const &bFile) const { } /* - Using the DC bootloader: - 1 : bl_reboot() // send to application, want DC2 to reset (in order to start - // the bootloader) - 2 : bl_startBL(): // send within 4s after DC poewer-on, otherwise bl is left - 3 : bl_check(): // send command to verify if bl is up - 4 : bl_isUp(): // returns true if bl is up and running + /////////////////////////////////////////////////////////////////////////////// + // + // USING THE DC BOOTLOADER + // + /////////////////////////////////////////////////////////////////////////////// + + 1 : bl_reboot() // send to application, want DC2 to reset (in order to + // start the bootloader) + // + // NOTE: this function is NOT reliable !!! Sometimes it + // simply does not work, in which case bl_startBL, + // bl_checkBL and bl_isUp do not work as well. + // Alas, there is no feedback if bl_reboot worked! + // + // NOTE: this function can be called only once per + // minute, because once called again, the controller + // performs some self-checks consuming some time. + // + // NOTE: after a successful bl_reboot(), the device is + // waiting about 4 seconds in the bootloader. To stay in + // the bootloader, we have to send the command + // bl_startBL(), which is kind of a misnomer, as it + // should be bl_doNotLeaveBL(). + // + 2 : bl_startBL(): // send within 4s after DC power-on, otherwise + // bootloader is left. + // + // NOTE: a running bootloader is a MUST for the download + // process of a device controller firmware as it does + // the actual writing of the memory (the bl_reboot() + // from above erases the available memory). + // + 3 : bl_check(): // send command to verify if bl is up + // + // NOTE: this command is kind of a request that we want + // to check if the bootloader is up. The device + // (actually the bootloader) responds with its version. + // + 4 : bl_isUp(): // returns true if bl is up and running + // + // NOTE: we know what the bootloader version actually is + // as the bootloader does not change. By comparing the + // string received in the previous step with this known + // version string we know if the bootloader is up. + // + // NOTE FOR ALL PREVIOUS STEPS: execute them in their + // own slots each to be sure to receive any possible + // responds from the device. + // 5 : bl_sendAddress(blockNumber) // send start address, nr of 64-byte block, start with 0 // will be sent only for following block-numbers: - // 0, 1024, 2048, 3072 and 4096, so basically every 64kByte + // 0, 1024, 2048, 3072 and 4096, so basically every + // 64kByte. // for other addresses nothing happens 6 : bl_wasSendingAddOK()