Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rc20562aef9d0b7487f16aeaa0568f1d92ca844ed -r55c11d87989243f1d755d06910529214db4f7312 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision c20562aef9d0b7487f16aeaa0568f1d92ca844ed) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 55c11d87989243f1d755d06910529214db4f7312) @@ -815,14 +815,30 @@ *************************************************************************/ static FPGA_STATE_T handleFPGAReceiveAllSensorsState( void ) { - static int CRCCounter = 0; - static int NAKCounter = 0; - FPGA_STATE_T result = FPGA_STATE_WRITE_ALL_ACTUATORS; // check bulk write command success - if ( ( FALSE == fpgaWriteCommandResponseReceived ) || ( fpgaWriteResponseBuffer[ 0 ] != FPGA_WRITE_CMD_ACK ) ) + if ( TRUE == fpgaWriteCommandResponseReceived ) { + // The write command completed so check for validity + if ( fpgaWriteResponseBuffer[ 0 ] == FPGA_WRITE_CMD_ACK) + { + // Message is an ack - check CRC + U32 rspSize = FPGA_READ_RSP_HDR_LEN; + U32 crcPos = rspSize; + U16 crc = MAKE_WORD_OF_BYTES( fpgaWriteResponseBuffer[ crcPos ], fpgaWriteResponseBuffer[ crcPos + 1 ] ); + + // Does the FPGA response CRC checkout? + if ( crc != crc16( fpgaWriteResponseBuffer, rspSize ) ) + { + // CRC failed + checkFPGACommFailure(); + } + } + } + else + { + // Timeout - communication error checkFPGACommFailure(); } @@ -833,18 +849,9 @@ if ( fpgaReadResponseBuffer[ 0 ] == FPGA_READ_CMD_ACK ) { U32 rspSize = FPGA_READ_RSP_HDR_LEN + fpgaReadByteSize; - U32 crcPos = rspSize; - U16 crc = MAKE_WORD_OF_BYTES( fpgaReadResponseBuffer[ crcPos ], fpgaReadResponseBuffer[ crcPos + 1 ] ); - U08 address1 = fpgaReadResponseBuffer[1]; //wjb - U08 address2 = fpgaReadResponseBuffer[2]; //wjb - U32 loadCell = getFPGALoadCellA1(); + U32 crcPos = rspSize; + U16 crc = MAKE_WORD_OF_BYTES( fpgaReadResponseBuffer[ crcPos ], fpgaReadResponseBuffer[ crcPos + 1 ] ); - if (fpgaReadResponseBuffer[1] != 0) - CRCCounter++; - - if (fpgaReadResponseBuffer[1] != 0xaa) - NAKCounter++; - // does the FPGA response CRC check out? if ( crc == crc16( fpgaReadResponseBuffer, rspSize ) ) {