Add API support signature to the CDC and DFU class bootloaders, so that the application can detect the bootloader's API support.

pull/1469/head
Dean Camera 13 years ago
parent 3dacb73af3
commit 43a3350981

@ -71,4 +71,3 @@ void BootloaderAPI_WriteLock(const uint8_t LockBits)
{ {
boot_lock_bits_set_safe(LockBits); boot_lock_bits_set_safe(LockBits);
} }

@ -32,12 +32,17 @@
.section .apitable, "ax" .section .apitable, "ax"
.org 0 .org 0
; API function jump table
.global BootloaderAPI_JumpTable .global BootloaderAPI_JumpTable
BootloaderAPI_JumpTable: BootloaderAPI_JumpTable:
jmp BootloaderAPI_ErasePage rjmp BootloaderAPI_ErasePage
jmp BootloaderAPI_WritePage rjmp BootloaderAPI_WritePage
jmp BootloaderAPI_FillWord rjmp BootloaderAPI_FillWord
jmp BootloaderAPI_ReadSignature rjmp BootloaderAPI_ReadSignature
jmp BootloaderAPI_ReadFuse rjmp BootloaderAPI_ReadFuse
jmp BootloaderAPI_ReadLock rjmp BootloaderAPI_ReadLock
jmp BootloaderAPI_WriteLock rjmp BootloaderAPI_WriteLock
; Bootloader table signature
.org 30
.word 0xDCFB

@ -103,8 +103,15 @@
* uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4); * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4);
* uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5); * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5);
* void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6); * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6);
*
* #define BOOTLOADER_SIG_START (FLASHEND - 32)
* #define BOOTLOADER_SIGNATURE 0xDCFB
* \endcode * \endcode
* *
* Bootloaders reporting a device release revision number of 1.00 or greater are bootloader API enabled. From the application
* the API support of the bootloader can be detected by reading the FLASH memory bytes located at address \c BOOTLOADER_SIG_START
* and comparing them to the value \c BOOTLOADER_SIGNATURE.
*
* \section Sec_Options Project Options * \section Sec_Options Project Options
* *
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.

@ -55,7 +55,7 @@ const USB_Descriptor_Device_t DeviceDescriptor =
.VendorID = 0x03EB, .VendorID = 0x03EB,
.ProductID = 0x204A, .ProductID = 0x204A,
.ReleaseNumber = VERSION_BCD(00.01), .ReleaseNumber = VERSION_BCD(01.00),
.ManufacturerStrIndex = NO_DESCRIPTOR, .ManufacturerStrIndex = NO_DESCRIPTOR,
.ProductStrIndex = 0x01, .ProductStrIndex = 0x01,

@ -32,12 +32,17 @@
.section .apitable, "ax" .section .apitable, "ax"
.org 0 .org 0
; API function jump table
.global BootloaderAPI_JumpTable .global BootloaderAPI_JumpTable
BootloaderAPI_JumpTable: BootloaderAPI_JumpTable:
jmp BootloaderAPI_ErasePage rjmp BootloaderAPI_ErasePage
jmp BootloaderAPI_WritePage rjmp BootloaderAPI_WritePage
jmp BootloaderAPI_FillWord rjmp BootloaderAPI_FillWord
jmp BootloaderAPI_ReadSignature rjmp BootloaderAPI_ReadSignature
jmp BootloaderAPI_ReadFuse rjmp BootloaderAPI_ReadFuse
jmp BootloaderAPI_ReadLock rjmp BootloaderAPI_ReadLock
jmp BootloaderAPI_WriteLock rjmp BootloaderAPI_WriteLock
; Bootloader table signature
.org 30
.word 0xDCFB

@ -108,8 +108,14 @@
* uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4); * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4);
* uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5); * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5);
* void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6); * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6);
*
* #define BOOTLOADER_SIG_START (FLASHEND - 32)
* #define BOOTLOADER_SIGNATURE 0xDCFB
* \endcode * \endcode
* *
* From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address
* \c BOOTLOADER_SIG_START and comparing them to the value \c BOOTLOADER_SIGNATURE.
*
* \section Sec_Options Project Options * \section Sec_Options Project Options
* *
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.

@ -31,6 +31,7 @@
* - Altered the Mass Storage Host class driver so that SCSI data STALLs from the attached device can be recovered from automatically without * - Altered the Mass Storage Host class driver so that SCSI data STALLs from the attached device can be recovered from automatically without
* having to reset the Mass Storage interface * having to reset the Mass Storage interface
* - USB_CONFIG_ATTR_BUSPOWERED constant renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed (thanks to NXP Semiconductors) * - USB_CONFIG_ATTR_BUSPOWERED constant renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed (thanks to NXP Semiconductors)
* - Reordered board name definition indexes so that a mispelled BOARD compile option will default to BOARD_USER rather than BOARD_USBKEY
* - Library Applications: * - Library Applications:
* - Altered the Mass Storage Host LowLevel demo so that SCSI data STALLs from the attached device can be recovered from automatically without * - Altered the Mass Storage Host LowLevel demo so that SCSI data STALLs from the attached device can be recovered from automatically without
* having to reset the Mass Storage interface * having to reset the Mass Storage interface

Loading…
Cancel
Save