14 #include <sys/types.h>
15 #include <sys/timeb.h>
18 #include "CFASegment.h"
22 typedef unsigned char byte;
23 typedef int VARIANT_BOOL;
34 #include <CAENVMElib.h>
37 #define FIRST_FIRMWARE_PAGE_BASE_WORD_ADDRESS 0x000000
38 #define SECOND_FIRMWARE_PAGE_BASE_WORD_ADDRESS 0x200000
39 #define THIRD_FIRMWARE_PAGE_BASE_WORD_ADDRESS 0x400000
40 #define FOURTH_FIRMWARE_PAGE_BASE_WORD_ADDRESS 0x600000
42 #define MAIN_MEM_PAGE_READ 0xD2
43 #define MAIN_MEM_PAGE_PROG_TH_BUF1 0x82
44 #define PAGE_ERASE 0x81
46 #define FIRST_PAGE_BCK 1408
47 #define FIRST_PAGE_STD 768
48 #define CF_SIZE 166965
75 printf(
"\nCAENBridgeUpgrade V2.2 \n\n");
76 printf(
"Usage: CAENBridgeUpgrade V1718 <VMEDevIndex> [FlashFile] [standard|backup] [-rbf]\n");
77 printf(
" CAENBridgeUpgrade V2718 <VMEDevIndex> <PCIDevIndex> [FlashFile] [standard|backup] [-rbf]\n");
78 printf(
" CAENBridgeUpgrade A2719 <VMEDevIndex> <PCIDevIndex> [FlashFile] [standard|backup] [-rbf]\n");
79 printf(
" CAENBridgeUpgrade A2818 <PCIDevIndex> [FlashFile] [standard|backup] [-rbf]\n");
80 printf(
" CAENBridgeUpgrade A3818 <PCIDevIndex> [FlashFile] [TargetFlashImage (0,1,2,3)] [-rbf]\n");
82 printf(
"Or: CAENBridgeUpgrade V1718 <VMEDevIndex> [FwRevFile] fwrev\n");
83 printf(
" CAENBridgeUpgrade V2718 <VMEDevIndex> <PCIDevIndex> [FwRevFile] fwrev\n");
84 printf(
" CAENBridgeUpgrade A2719 <VMEDevIndex> <PCIDevIndex> [FwRevFile] fwrev\n");
85 printf(
" CAENBridgeUpgrade A2818 <PCIDevIndex> [FwRevFile] fwrev\n");
86 printf(
" CAENBridgeUpgrade A3818 <PCIDevIndex> [FwRevFile] fwrev\n");
91 if(( strcmp(arg,
"V1718") == 0 )|| ( strcmp(arg,
"v1718") == 0 ))
return cvV1718;
92 if(( strcmp(arg,
"V2718") == 0 )|| ( strcmp(arg,
"v2718") == 0 ))
return cvV2718;
93 if(( strcmp(arg,
"A2719") == 0 )|| ( strcmp(arg,
"a2719") == 0 ))
return cvA2719;
94 if(( strcmp(arg,
"A2818") == 0 )|| ( strcmp(arg,
"a2818") == 0 ))
return cvA2818;
95 if(( strcmp(arg,
"A3818") == 0 )|| ( strcmp(arg,
"a3818") == 0 ))
return cvA3818;
127 int main(
int argc,
char *argv[])
140 int TargetFlashImage = 0;
141 int finish,
i, verify_err,ret;
143 unsigned char pdw[264], pdr[264],
c;
161 if( strcmp((
char*)argv[4],
"standard" ) == 0 ) {
164 if( strcmp((
char*)argv[4],
"backup") == 0 ) {
166 }
else if ( strcmp((
char*)argv[4],
"fwrev") == 0 ) {
173 if (argc >= 6 && (strcmp(argv[5],
"-rbf") == 0)) {
180 Device = atoi((
const char*)argv[2]);
186 Link = atoi((
const char*)argv[2]);
188 if(!fwread && (stream = fopen((
const char*)argv[3],
"rb" )) == NULL ) {
189 printf(
"File %s not found\n",(
char *)argv[3]);
193 printf(
"\n\nLoading file %s\n", argv[3]);
202 if( strcmp((
char*)argv[5],
"standard") == 0 ) {
205 if( strcmp((
char*)argv[5],
"backup") == 0 ) {
207 }
else if ( strcmp((
char*)argv[5],
"fwrev") == 0 ) {
214 if (argc >= 7 && strcmp(argv[6],
"-rbf") == 0) {
218 Device = atoi((
const char*) argv[3]);
219 Link = atoi((
const char*) argv[2]);
220 if(!fwread && (stream = fopen((
const char*)argv[4],
"rb" )) == NULL ) {
221 printf(
"File %s not found\n",argv[4]);
232 printf(
"\n\nLoading file %s\n", argv[4]);
236 if (strcmp((
char*)argv[4],
"fwrev")==0) fwread = 1;
237 else TargetFlashImage = atoi((
const char*)argv[4]);
238 if (argc >= 6 && strcmp(argv[5],
"-rbf") == 0) {
243 Link = atoi((
const char*)argv[2]);
244 if(!fwread && (stream = fopen((
const char*)argv[3],
"rb" )) == NULL ) {
245 printf(
"File %s not found\n",argv[3]);
249 printf(
"\n\nLoading file %s\n", argv[3]);
260 printf(
"\n\nCannot find a compatible firmware in the CFA file\n");
267 printf(
"\n\nError opening the device\n");
275 stream = fopen((
const char*)argv[4],
"w" );
278 stream = fopen((
const char*)argv[3],
"w" );
283 printf(
"\n\nError reading firmware revision\n");
290 fprintf(stream,
"Firmware revision = %s",fwrev);
292 printf(
"\n\nFirmware revision read successfully\n");
338 if (!cfa) c = (
unsigned char)fgetc(stream);
339 else c = fwdata[fi++];
342 for( i = 0; i < 8; i++ )
344 pdw[bp] = pdw[bp] | (0x80 >> i);
347 if( !cfa && feof(stream) ) finish = 1;
348 else if (cfa && fi >= fwsize) finish = 1;
350 if( (bp == 264) || finish ) {
362 for( i = 0; i < bp; i++ ) {
363 if( pdr[i] != pdw[i] ) {
364 printf(
"%x = %x\n",pdr[i],pdw[i]);
365 printf(
"\n\n Writing or Verify error at page %d - %d\n", pp, i);
381 if( verify_err > 0 ) {
382 printf(
"\n\n%d errors found during verify!\n",verify_err);
383 printf(
"Firmware upgrade not done. Move jumper to BCK to restore\n\n");
386 printf(
"\n\nFirmware updated without errors. Written %d bytes\n",bcnt);
387 printf(
"Power cycle to load the new firmware\n\n");