}
for (i = 0; i < status; i += 2) {
- fprintf(stderr, "Status: 0x%02x\n", trbBuffer[i + 1] & 0xff);
+ /* fprintf(stderr, "Status: 0x%02x\n", trbBuffer[i + 1] & 0xff);*/
if (((trbBuffer[i + 1] >> 5) & 0x01) == 1) {
fprintf(stderr, "Erase or program error on EndPoint 0x%04x\n",
trbBuffer[i] & 0xffff);
for (c = 0; c < numBytes; c++) {
if ((c % 4) == 0) {
temp++;
- temp = 0;
+ *temp = 0;
}
*temp |= (pageBuffer[c] << ((c % 4) * 8));
}
trb_error("Error > writePage: tranfer trbBuffer");
exit(EXIT_FAILURE);
}
-
+
/* Enable writing */
if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
fprintf(stderr, "Error > writePage: write enable\n");
return -1;
}
+ /* Wait for not busy and check status */
+ while ((status = checkStatus(trb_address) == -2)) {
+ /* fprintf(stderr, "Wait pageProgram ...\n"); */
+ }
+
+ if (status != 0) {
+ fprintf(stderr, "Error > pageWrite: invalid status\n");
+ return -1;
+ }
+
return 0;
}
trb_address, imageFileName);
for (page = 0; page < NUM_PAGES; page++) {
if (readPage(trb_address, page, 256) == -1) {
- fprintf(stderr, "Error reading Page# %d, aborting..\n", page);
+ fprintf(stderr, "Error 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, "Error writing Page #%d to file, aborting..\n", page);
fclose(imageFile);
exit(EXIT_FAILURE);
}
fclose(imageFile);
/* Check ImageBuffer ??? */
+ for (i = 0; i < PAGE_SIZE * NUM_PAGES; i++) {
+ imageBuffer[i] = i % 256;
+ }
+
+ fprintf(stderr, "Block: 0 1 2 3 4 5 6 7 8 9 A B C D E F");
+
- page = 0;
for (block = 0; block < NUM_BLOCKS; block++) {
+ if (block % 16 == 0) {
+ fprintf(stderr, "\n%x ", block / 16);
+ }
+ fprintf(stderr, ".\b");
/* Enable writing */
if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
fprintf(stderr, "Error > restore: write enable, aborting\n");
}
/* Erase block */
+ fprintf(stderr, "E\b");
if (sendCommand(trb_address, 0xd8 << 24 | (BLOCK_SIZE * block), 3)
== -1) {
fprintf(stderr, "Error > restore: erase block #%d, aborting\n",
/* Wait for not busy and check status */
while ((status = checkStatus(trb_address) == -2)) {
- fprintf(stderr, "Wait..\n");
+ /* fprintf(stderr, "Wait erase..\n");*/
}
if (status != 0) {
}
/* Now write pages */
- for (i = 0; i < (BLOCK_SIZE / PAGE_SIZE); i++) {
+ fprintf(stderr, "P\b");
+ page = (block * BLOCK_SIZE) / PAGE_SIZE;
+ for (i = 0, page = (block * BLOCK_SIZE) / PAGE_SIZE;
+ i < (BLOCK_SIZE / PAGE_SIZE);
+ i++, page++) {
+
status = writePage(trb_address, page,
imageBuffer + page * PAGE_SIZE, PAGE_SIZE);
if (status == -1) {
- fprintf(stderr, "Error > restore: writePage, aborting\n");
+ fprintf(stderr, "Error > restore: pageProgram page #%d, aborting\n",
+ page);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ /* Enable writing */
+ if (sendCommand(trb_address, 0x06 << 24, 0) == -1) {
+ fprintf(stderr, "Error > restore: write enable, aborting\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Protect sector */
+ if (sendCommand(trb_address, 0x36 << 24 | (BLOCK_SIZE * block), 3)
+ == -1) {
+ fprintf(stderr, "Error > restore: unprotect sector #%d, aborting\n",
+ block);
+ exit(EXIT_FAILURE);
+ }
+
+ /* Verify pages */
+ fprintf(stderr, "V\b");
+ page = (block * BLOCK_SIZE) / PAGE_SIZE;
+ for (i = 0, page = (block * BLOCK_SIZE) / PAGE_SIZE;
+ i < (BLOCK_SIZE / PAGE_SIZE);
+ i++, page++) {
+ unsigned int endPoint;
+ unsigned int c;
+
+ if ((status = readPage(trb_address, page, 256)) == -1) {
+ fprintf(stderr, "Error > restore: reading Page #%d, aborting\n",
+ page);
exit(EXIT_FAILURE);
}
- page++;
+
+ for (endPoint = 0; endPoint < status; endPoint++) {
+ int verifyOK = 0;
+ for (c = 0; c < PAGE_SIZE; c++) {
+ if (pageBuffer[endPoint][c] !=
+ *(imageBuffer + page * PAGE_SIZE + c)) {
+ verifyOK = -1;
+ }
+ }
+ if (verifyOK == -1) {
+ fprintf(stderr,
+ "Error > restore: verify failed for page #%d, "
+ "of EndPoint 0x%04x\n",
+ page, pageBufferAddress[endPoint]);
+ }
+ }
}
+
+ fprintf(stderr, "@ ");
}
-
+
+ fprintf(stderr, "\n\nDone\n");
+
} else if (strcmp(argv[optind], "test") == 0) {
uint16_t trb_address;
uint32_t pageNumber;