Skip to content
Snippets Groups Projects
Commit fa4b08bf authored by Pieter Donker's avatar Pieter Donker
Browse files

Bug 335: further development of TBBDriver

parent 6ef2eba1
No related branches found
No related tags found
No related merge requests found
...@@ -35,7 +35,7 @@ namespace LOFAR { ...@@ -35,7 +35,7 @@ namespace LOFAR {
using GCF::TM::GCFPortInterface; using GCF::TM::GCFPortInterface;
namespace TBB { namespace TBB {
static const int DRIVER_VERSION = 218; // 2.18 static const int DRIVER_VERSION = 219; // TBBDriver V2.19
enum BoardStateT {noBoard, enum BoardStateT {noBoard,
setImage1, image1Set, setImage1, image1Set,
......
...@@ -112,7 +112,7 @@ void StatusCmd::saveTpAckEvent(GCFEvent& event) ...@@ -112,7 +112,7 @@ void StatusCmd::saveTpAckEvent(GCFEvent& event)
itsWatchDogMode[getBoardNr()] = ((tp_ack.info[5] >> 16) & 0xf); itsWatchDogMode[getBoardNr()] = ((tp_ack.info[5] >> 16) & 0xf);
itsPgood[getBoardNr()] = tp_ack.info[0]; itsPgood[getBoardNr()] = tp_ack.info[0];
LOG_INFO_STR(formatString("Status info = 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x", LOG_DEBUG_STR(formatString("Status info = 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",
tp_ack.info[0], tp_ack.info[5], tp_ack.info[6], tp_ack.info[0], tp_ack.info[5], tp_ack.info[6],
tp_ack.info[7], tp_ack.info[8], tp_ack.info[9])); tp_ack.info[7], tp_ack.info[8], tp_ack.info[9]));
} }
......
...@@ -254,7 +254,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event) ...@@ -254,7 +254,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
TPErasefAckEvent tp_ack(event); TPErasefAckEvent tp_ack(event);
LOG_DEBUG_STR(formatString("Received ErasefAck from boardnr[%d]", getBoardNr())); LOG_DEBUG_STR(formatString("Received ErasefAck from boardnr[%d]", getBoardNr()));
if (tp_ack.status != 0) { if (tp_ack.status != 0) {
setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24))); setStatus(0, (TBB_FLASH_ERASE_ERROR | (tp_ack.status << 24)));
setDone(true); setDone(true);
} else { } else {
itsSector++; itsSector++;
...@@ -268,7 +268,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event) ...@@ -268,7 +268,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
TPWritefAckEvent tp_ack(event); TPWritefAckEvent tp_ack(event);
LOG_DEBUG_STR(formatString("Received WritefAck from boardnr[%d]", getBoardNr())); LOG_DEBUG_STR(formatString("Received WritefAck from boardnr[%d]", getBoardNr()));
if (tp_ack.status != 0) { if (tp_ack.status != 0) {
setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24))); setStatus(0, (TBB_FLASH_WRITE_ERROR | (tp_ack.status << 24)));
setDone(true); setDone(true);
} else { } else {
itsBlock++; itsBlock++;
...@@ -287,7 +287,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event) ...@@ -287,7 +287,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
TPReadfAckEvent tp_ack(event); TPReadfAckEvent tp_ack(event);
LOG_DEBUG_STR(formatString("Received ReadfAck from boardnr[%d]", getBoardNr())); LOG_DEBUG_STR(formatString("Received ReadfAck from boardnr[%d]", getBoardNr()));
if (tp_ack.status != 0) { if (tp_ack.status != 0) {
setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24))); setStatus(0, (TBB_FLASH_VERIFY_ERROR | (tp_ack.status << 24)));
if (itsImage == 0) { if (itsImage == 0) {
itsStage = protect; itsStage = protect;
} else { } else {
...@@ -295,15 +295,21 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event) ...@@ -295,15 +295,21 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
} }
} else { } else {
for (int i = 0; i < (TS->flashBlockSize() / 4); i++) { for (int i = 0; i < (TS->flashBlockSize() / 4); i++) {
testdata = static_cast<uint32>(itsImageData[itsDataPtr])
+ (static_cast<uint32>(itsImageData[itsDataPtr+1]) << 8)
+ (static_cast<uint32>(itsImageData[itsDataPtr+2]) << 16)
+ (static_cast<uint32>(itsImageData[itsDataPtr+3]) << 24);
itsDataPtr += 4;
/*
testdata = itsImageData[itsDataPtr]; itsDataPtr++; testdata = itsImageData[itsDataPtr]; itsDataPtr++;
testdata |= (itsImageData[itsDataPtr] << 8); itsDataPtr++; testdata |= (itsImageData[itsDataPtr] << 8); itsDataPtr++;
testdata |= (itsImageData[itsDataPtr] << 16); itsDataPtr++; testdata |= (itsImageData[itsDataPtr] << 16); itsDataPtr++;
testdata |= (itsImageData[itsDataPtr] << 24); itsDataPtr++; testdata |= (itsImageData[itsDataPtr] << 24); itsDataPtr++;
*/
if (tp_ack.data[i] != testdata) { if (tp_ack.data[i] != testdata) {
LOG_DEBUG_STR(formatString("block(%d) uint32(%d) NOT same 0x%08X 0x%08X (WritefCmd(verify_flash stage))", LOG_DEBUG_STR(formatString("block(%d) uint32(%d) NOT same 0x%08X 0x%08X (WritefCmd(verify_flash stage))",
itsBlock,i,tp_ack.data[i],testdata)); itsBlock,i,tp_ack.data[i],testdata));
setStatus(0, TBB_FLASH_ERROR); setStatus(0, TBB_FLASH_VERIFY_ERROR);
if (itsImage == 0) { if (itsImage == 0) {
itsStage = protect; itsStage = protect;
} else { } else {
......
...@@ -66,16 +66,16 @@ public: ...@@ -66,16 +66,16 @@ public:
private: private:
TbbSettings *TS; TbbSettings *TS;
flashStage itsStage; flashStage itsStage;
int32 itsImage; int32 itsImage;
int32 itsSector; int32 itsSector;
int32 itsBlock; int32 itsBlock;
int32 itsImageSize; int32 itsImageSize;
int32 itsDataPtr; int32 itsDataPtr;
char itsFileNameTp[64]; char itsFileNameTp[64];
char itsFileNameMp[64]; char itsFileNameMp[64];
uint32 itsPassword; uint32 itsPassword;
uint8 *itsImageData; // data from hex files uint8 *itsImageData; // data from hex files
}; };
} // end TBB namespace } // end TBB namespace
......
...@@ -44,7 +44,7 @@ namespace LOFAR { ...@@ -44,7 +44,7 @@ namespace LOFAR {
GCFTimerPort* itsCmdTimer; GCFTimerPort* itsCmdTimer;
static const int TBBCTL_VERSION = 215; static const int TBBCTL_VERSION = 219; // tbbctl V2.19
// MAX_N_TBBOARDS and MAX_N_RCUS come from TBB_protocol.ph // MAX_N_TBBOARDS and MAX_N_RCUS come from TBB_protocol.ph
...@@ -142,8 +142,10 @@ public: ...@@ -142,8 +142,10 @@ public:
case TBB_TIME_OUT : str = "time-out"; break; case TBB_TIME_OUT : str = "time-out"; break;
case TBB_BUSY : str = "driver busy"; break; case TBB_BUSY : str = "driver busy"; break;
case TBB_FLASH_FILE_NOT_FIND : str = "hex files not found"; break; case TBB_FLASH_FILE_NOT_FIND : str = "hex files not found"; break;
case TBB_FLASH_ERROR : str = "flash error"; break; case TBB_FLASH_BAD_PASSWORD : str = "bad password for image 0"; break;
case TBB_FLASH_BAD_PASSWORD : str = "bad password for image 0"; break; case TBB_FLASH_ERASE_ERROR : str = "flash erase error"; break;
case TBB_FLASH_WRITE_ERROR : str = "flash write error"; break;
case TBB_FLASH_VERIFY_ERROR : str = "flash verify error"; break;
case TBB_CH_NOT_FREE : str = "channel not free"; break; case TBB_CH_NOT_FREE : str = "channel not free"; break;
case TBB_CH_NOT_ALLOCATED : str = "channel not allocated"; break; case TBB_CH_NOT_ALLOCATED : str = "channel not allocated"; break;
case TBB_CH_NOT_STOPPED : str = "channel not stopped"; break; case TBB_CH_NOT_STOPPED : str = "channel not stopped"; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment