parsing finished

This commit is contained in:
Markus Fröschle
2012-12-17 20:58:01 +00:00
parent add0976793
commit b205f12da2
2 changed files with 23 additions and 14 deletions

View File

@@ -88,8 +88,8 @@ static uint8_t CardType; /* Card type flags */
static uint32_t dspi_fifo_val = /* CONT disable continous chip select */ static uint32_t dspi_fifo_val = /* CONT disable continous chip select */
/* CTAS use DCTAR0 for clock and attributes */ /* CTAS use DCTAR0 for clock and attributes */
MCF_DSPI_DTFR_EOQ; /* current transfer is last in queue */ MCF_DSPI_DTFR_EOQ | /* current transfer is last in queue */
MCF_DSPI_DTFR_CTCNT;
/* Exchange a byte */ /* Exchange a byte */
static uint8_t xchg_spi(uint8_t byte) static uint8_t xchg_spi(uint8_t byte)
@@ -102,8 +102,8 @@ static uint8_t xchg_spi(uint8_t byte)
MCF_DSPI_DSR = 0xffffffff; /* clear DSPI status register */ MCF_DSPI_DSR = 0xffffffff; /* clear DSPI status register */
fifo = MCF_DSPI_DRFR; fifo = MCF_DSPI_DRFR;
MCF_DSPI_DSR = 0xffffffff;
res = fifo & 0xff; res = fifo & 0xff;
return res; return res;
} }
@@ -166,7 +166,6 @@ static void deselect(void)
{ {
CS_HIGH(); CS_HIGH();
xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */ xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
MCF_DSPI_DSR = 0xffffffff; /* clear status register */
} }

View File

@@ -129,7 +129,6 @@ void line_to_vector(uint8_t *line, uint8_t *vector)
*vp++ = nibble_to_byte(*line); /* record type. Only one single nibble */ *vp++ = nibble_to_byte(*line); /* record type. Only one single nibble */
line++; line++;
xprintf(" ");
for (i = 0; i <= length; i++) for (i = 0; i <= length; i++)
{ {
*vp++ = hex_to_byte(line); *vp++ = hex_to_byte(line);
@@ -149,6 +148,8 @@ err_t read_srecords(char *filename, uint32_t *start_address, uint32_t *actual_le
int lineno = 0; int lineno = 0;
int data_records = 0; int data_records = 0;
bool found_block_header = FALSE; bool found_block_header = FALSE;
bool found_block_end = FALSE;
bool found_block_data = FALSE;
xprintf("succesfully opened file \"%s\"\r\n", filename); xprintf("succesfully opened file \"%s\"\r\n", filename);
@@ -161,7 +162,7 @@ err_t read_srecords(char *filename, uint32_t *start_address, uint32_t *actual_le
if (line[0] == 'S') if (line[0] == 'S')
{ {
print_record(vector); //print_record(vector);
if (SREC_CHECKSUM(vector) != checksum(vector)) if (SREC_CHECKSUM(vector) != checksum(vector))
{ {
xprintf("invalid checksum in line %d\r\n", lineno); xprintf("invalid checksum in line %d\r\n", lineno);
@@ -171,8 +172,13 @@ err_t read_srecords(char *filename, uint32_t *start_address, uint32_t *actual_le
switch (vector[0]) switch (vector[0])
{ {
case 0: /* block header */ case 0: /* block header */
xprintf("S0 record (block header found)\r\n"); xprintf("S0 record (block header) found\r\n");
found_block_header = TRUE; found_block_header = TRUE;
if (found_block_data || found_block_end)
{
xprintf("S7 or S3 record found before S0: S-records corrupt?\r\n");
ret = FAIL;
}
break; break;
case 1: case 1:
@@ -183,22 +189,26 @@ err_t read_srecords(char *filename, uint32_t *start_address, uint32_t *actual_le
break; break;
case 3: case 3:
// xprintf("S3 record (four byte address field) found\r\n"); // xprintf("S3 record (four byte address field) found\r\n");
if (found_block_header) if (!found_block_header || found_block_end)
{ {
data_records++; xprintf("S3 record found before S0 or after S7: S-records corrupt?\r\n");
}
else
{
xprintf("found a data record without a block header before. Data is probably invalid\r\n");
ret = FAIL; ret = FAIL;
} }
data_records++;
break; break;
case 5: case 5:
xprintf("S5 record (record count record) found\r\n"); xprintf("S5 record (record count record) found\r\n");
break; break;
case 7: case 7:
xprintf("S7 record (end of block) found after %d valid data blocks\r\n", data_records); if (!found_block_header || found_block_end)
{
xprintf("S7 record found before S0 or after S7: S-records corrupt?\r\n");
}
else
{
xprintf("S7 record (end) found after %d valid data blocks\r\n", data_records);
}
break; break;
case 8: case 8:
xprintf("S8 record (end of block) found\r\n"); xprintf("S8 record (end of block) found\r\n");