{
uint32_t trbcmd;
int status;
- int ret = 0;
+ int ret;
int i;
/* Read Status Register */
return -1;
}
+ ret = 0;
for (i = 0; i < status; i += 2) {
- if (((trbBuffer[i + 1] >> 5) & 0x01) == 1) {
- fprintf(logFile, "Error > checkStatus: Erase or program error on "
- "EndPoint 0x%04x\n", trbBuffer[i] & 0xffff);
- return -1; /* Fatal Error */
+ if ((flashType == FLASH_ADCM1) || (flashType == FLASH_ADCM2)) {
+ /* Check EPE Bit (ADCM only) */
+ if (((trbBuffer[i + 1] >> 5) & 0x01) == 1) {
+ fprintf(logFile, "Error > checkStatus: Erase or program error on "
+ "EndPoint 0x%04x\n", trbBuffer[i] & 0xffff);
+ return -1; /* Fatal Error */
+ }
}
if ((trbBuffer[i + 1] & 0x01) == 1) {
ret = -2; /* One is busy */
return ret;
}
+static int writeStatusRegister(uint16_t trb_address, uint8_t value)
+{
+ int status;
+
+ /* Enable writing */
+ if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
+ fprintf(logFile, "Error > writeStatusRegister: write enable\n");
+ return -1;
+ }
+
+ if (trb_register_write(trb_address, BlockRam, (uint32_t)value) == -1) {
+ fprintf(logFile, "Error > writeStatusRegister: TRBNet %s\n",
+ trb_strerror(trb_errno));
+ return -1;
+ }
+ if (sendCommand(trb_address, 0x01 << 24, 0) == -1) {
+ fprintf(logFile, "Error > writeStatusRegister: sendCommand\n");
+ return -1;
+ }
+
+ /* Wait for not busy and check status */
+ while ((status = checkStatus(trb_address) == -2)) {}
+
+ if (status != 0) {
+ fprintf(logFile, "Error > writeStatusRegister: invalid status\n");
+ return -1;
+ }
+
+ return 0;
+}
+
static int initTransfer(uint16_t trb_address)
{
/* Find Endpoint(s) ManId and allocate needed memory */
errorCtr = 0;
if ((verifyOnly == 0) && (flashType == FLASH_MDC)) {
- /* Enable writing */
- if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: write enable, aborting\n");
- return -1;
- }
-
/* Unprotect all Sectors */
- if (trb_register_write(trb_address, BlockRam, 0) == -1) {
- fprintf(logFile, "Error > program: TRBNet %s\n",
- trb_strerror(trb_errno));
+ if (writeStatusRegister(trb_address, 0) == -1) {
+ fprintf(stderr, "\nError > program: unprotect all sectors, aborting\n");
return -1;
}
- if (sendCommand(trb_address, 0x01 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: unprotect all sectors, aborting\n");
- return -1;
- }
- }
+ }
for (block = 0; (block < NUM_BLOCKS) && (bytesWritten > 0); block++) {
int error = 0;
if ((flashType == FLASH_ADCM1) || (flashType == FLASH_ADCM2)) {
/* Enable writing */
if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: write enable, aborting\n");
+ fprintf(stderr, "\nError > program: write enable, aborting\n");
return -1;
}
/* Unprotect sector */
if (sendCommand(trb_address, 0x39 << 24 | (BLOCK_SIZE * block), 3)
== -1) {
- fprintf(stderr, "Error > program: unprotect sector #%d, aborting\n",
+ fprintf(stderr, "\nError > program: unprotect sector #%d, aborting\n",
block);
return -1;
}
/* Enable writing */
if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: write enable, aborting\n");
+ fprintf(stderr, "\nError > program: write enable, aborting\n");
return -1;
}
fprintf(stderr, "E\b");
if (sendCommand(trb_address, 0xd8 << 24 | (BLOCK_SIZE * block), 3)
== -1) {
- fprintf(stderr, "Error > program: erase block #%d, aborting\n",
+ fprintf(stderr, "\nError > program: erase block #%d, aborting\n",
block);
return -1;
}
/* Wait for not busy and check status */
- while ((status = checkStatus(trb_address) == -2)) {
- /* fprintf(stderr, "Wait erase..\n");*/
- }
+ while ((status = checkStatus(trb_address) == -2)) {}
if (status != 0) {
- fprintf(stderr, "Error > program: invalid status, aborting\n");
+ fprintf(stderr, "\nError > program: invalid status, aborting\n");
return -1;
}
status = writePage(trb_address, page,
imageBuffer + page * PAGE_SIZE, bytes);
if (status == -1) {
- fprintf(stderr, "Error > program: pageProgram page #%d, aborting\n",
+ fprintf(stderr, "\nError > program: pageProgram page #%d, aborting\n",
page);
return -1;
}
if ((flashType == FLASH_ADCM1) || (flashType == FLASH_ADCM2)) {
/* Enable writing */
if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: write enable, aborting\n");
+ fprintf(stderr, "\nError > program: write enable, aborting\n");
return -1;
}
/* Protect sector */
if (sendCommand(trb_address, 0x36 << 24 | (BLOCK_SIZE * block), 3)
== -1) {
- fprintf(stderr, "Error > program: unprotect sector #%d, aborting\n",
+ fprintf(stderr, "\nError > program: unprotect sector #%d, aborting\n",
block);
return -1;
}
tmp -= bytes;
if ((status = readPage(trb_address, page, bytes)) == -1) {
- fprintf(stderr, "Error > program: reading Page #%d, aborting\n",
+ fprintf(stderr, "\nError > program: reading Page #%d, aborting\n",
page);
return -1;
}
}
if ((verifyOnly == 0) && (flashType == FLASH_MDC)) {
- /* Enable writing */
- if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: write enable, aborting\n");
- return -1;
- }
-
/* Protect all Sectors */
- if (trb_register_write(trb_address, BlockRam, 0x3c) == -1) {
- fprintf(logFile, "Error > program: TRBNet %s\n",
- trb_strerror(trb_errno));
+ if (writeStatusRegister(trb_address, 0x3c) == -1) {
+ fprintf(stderr, "\nError > program: protect all sectors, aborting\n");
return -1;
}
- if (sendCommand(trb_address, 0x01 << 24, 0) == -1) {
- fprintf(stderr, "Error > program: unprotect all sectors, aborting\n");
- return -1;
- }
- }
-
+ }
+
if (errorCtr == 0) {
fprintf(stderr, "\n\nSuccess\n\n");
} else {
for (page = 0; page < NUM_PAGES; page++) {
if (readPage(trb_address, page, PAGE_SIZE) == -1) {
- fprintf(stderr, "Error reading Page #%d, aborting..\n", page);
+ fprintf(stderr, "\nError reading Page #%d, aborting..\n", page);
fclose(imageFile);
exit(EXIT_FAILURE);
}
if (fwrite((void*)pageBuffer[0], PAGE_SIZE, 1, imageFile) != 1) {
- fprintf(stderr, "Error writing Page #%d to file, aborting..\n", page);
+ fprintf(stderr,
+ "\nError writing Page #%d to file, aborting..\n", page);
fclose(imageFile);
exit(EXIT_FAILURE);
}