* chore(kboot): add more logging * fix: add uncaughtException handler * fix: wait to prevent race condition * fix: don't close device after success left keyboard connection * revert: remove extra delay * revert: add back the waiting * fix: always initialize new KBoot instance when try to configure I2C * fix: increase the wait time between 2 IC2 reconnection * fix: timing and usb reconnection * fix: dont close kboot device * feat: append the WithKboot to the firmware upgrade methods * feat: revert back the blhost functionality
Javascript implementation of the Kinetis Bootloader protocol
Based on the Kinetis Bootloader v2.0.0 Reference Manual
Supported communication channels/protocols
- USB
- I2C
- SPI
- CAN
- UART
Supported Commands
We implemented only the commands that is used in UHK software. If someone needs other commands, (s)he can easily implement it based on existing.
- GetProperty
- SetProperty
- FlashEraseAll
- FlashEraseRegion
- FlashEraseAllUnsecure
- ReadMemory
- WriteMemory
- FillMemory
- FlashSecurityDisable
- Execute
- Call
- Reset
- FlashProgramOnce
- FlashReadOnce
- FlashReadResource
- ConfigureQuadSpi
- ReliableUpdate
- ConfigureI2c
- ConfigureSpi
- ConfigureCan
How to use
// Initialize peripheral
const usbPeripheral = new UsbPeripheral({ productId: 1, vendorId: 1 });
// Initialize Kboot
const kboot = new KBoot(usbPeripheral);
// Call the command
const version = await kboot.getBootloaderVersion();
// ... more commands
// Close the communication channel. Release resources
kboot.close();
If you have to communicate other I2C device over USB call kboot.configureI2c(i2cId) before the command.
const usbPeripheral = new UsbPeripheral({ productId: 1, vendorId: 1 });
const kboot = new KBoot(usbPeripheral);
// Get the bootloader version of I2C device
await kboot.configureI2c(i2cId);
const version = await kboot.getBootloaderVersion();
TODO
- Improve exception handling