Fix off-by-one error in the Mass Storage bootloader file size, add missing Volume Label directory entry. Remove incorrect reference to "printer" in the bootloader documentation.

pull/1469/head
Dean Camera 12 years ago
parent de9d05f32a
commit 68c317c4e9

@ -57,7 +57,7 @@
* *
* \section Sec_Installation Driver Installation * \section Sec_Installation Driver Installation
* *
* This bootloader uses the Mass Storage printer drivers inbuilt into all modern operating systems, thus no additional * This bootloader uses the Mass Storage drivers inbuilt into all modern operating systems, thus no additional
* drivers need to be supplied for correct operation. * drivers need to be supplied for correct operation.
* *
* \section Sec_HostApp Host Controller Application * \section Sec_HostApp Host Controller Application

@ -72,16 +72,34 @@ static const FATBootBlock_t BootBlock =
}; };
/** FAT 8.3 style directory entry, for the virtual FLASH contents file. */ /** FAT 8.3 style directory entry, for the virtual FLASH contents file. */
static FATDirectoryEntry_t FirmwareFileEntry = static FATDirectoryEntry_t FirmwareFileEntries[2] =
{ {
.Filename = "FIRMWARE", /* Root volume label entry; disk label is contained in the Filename and
.Extension = "BIN", * Extension fields (concantenated) with a special attribute flag - other
.Attributes = 0, * fields are ignored. Should be the same as the label in the boot block.
.Reserved = {0}, */
.CreationTime = FAT_TIME(1, 1, 0), {
.CreationDate = FAT_DATE(14, 2, 1989), .Filename = "LUFA BOO",
.StartingCluster = 2, .Extension = "T ",
.FileSizeBytes = FIRMWARE_FILE_SIZE_BYTES, .Attributes = (1 << 3),
.Reserved = {0},
.CreationTime = 0,
.CreationDate = 0,
.StartingCluster = 0,
.FileSizeBytes = 0,
},
/* File entry for the virtual Firmware image. */
{
.Filename = "FIRMWARE",
.Extension = "BIN",
.Attributes = 0,
.Reserved = {0},
.CreationTime = FAT_TIME(1, 1, 0),
.CreationDate = FAT_DATE(14, 2, 1989),
.StartingCluster = 2,
.FileSizeBytes = FIRMWARE_FILE_SIZE_BYTES,
},
}; };
@ -101,8 +119,8 @@ static void UpdateFAT12ClusterEntry(uint8_t* const FATTable,
const uint16_t ChainEntry) const uint16_t ChainEntry)
{ {
/* Calculate the starting offset of the cluster entry in the FAT12 table */ /* Calculate the starting offset of the cluster entry in the FAT12 table */
uint8_t FATOffset = (Index * 3) / 2; uint8_t FATOffset = (Index + (Index >> 1));
bool UpperNibble = (((Index * 3) % 2) != 0); bool UpperNibble = ((Index & 1) != 0);
/* Check if the start of the entry is at an upper nibble of the byte, fill /* Check if the start of the entry is at an upper nibble of the byte, fill
* out FAT12 entry as required */ * out FAT12 entry as required */
@ -195,7 +213,7 @@ static void ReadVirtualBlock(const uint16_t BlockNumber)
break; break;
case 3: /* Block 3: Root file entries */ case 3: /* Block 3: Root file entries */
memcpy(BlockBuffer, &FirmwareFileEntry, sizeof(FATDirectoryEntry_t)); memcpy(BlockBuffer, FirmwareFileEntries, sizeof(FirmwareFileEntries));
break; break;
default: /* Blocks 4 onwards: Data allocation section */ default: /* Blocks 4 onwards: Data allocation section */

@ -39,7 +39,7 @@
/* Macros: */ /* Macros: */
/** Size of the virtual FIRMWARE.BIN file in bytes. */ /** Size of the virtual FIRMWARE.BIN file in bytes. */
#define FIRMWARE_FILE_SIZE_BYTES (FLASHEND - (FLASHEND - BOOT_START_ADDR) + 1UL) #define FIRMWARE_FILE_SIZE_BYTES (FLASHEND - (FLASHEND - BOOT_START_ADDR))
/** Number of sectors that comprise a single logical disk cluster. */ /** Number of sectors that comprise a single logical disk cluster. */
#define SECTOR_PER_CLUSTER 4 #define SECTOR_PER_CLUSTER 4

Loading…
Cancel
Save