Post Go back to editing

MAX98090EVKIT firmware upload

Category: Hardware
Product Number: MAX98090

The MAX98090EVKIT software includes a firmware update utility. I had some trouble using the board, and I thought the firmware update might help. The utility successfully erases the onboard MAXQ2000  processor, then fails to upload the new firmware, effectively rendering the board useless. Is there a trick to using the utility so I can get this board working again? The full console dump is below.

Plug USB cable in to begin firmware update...

C:\Program Files (x86)\Maxim Integrated\MAX98090\Evaluation Software\Firmware\MAXQ2000>pause  1>nul  | set /p=Press any key to continue....   & echo(
Press any key to continue....

C:\Program Files (x86)\Maxim Integrated\MAX98090\Evaluation Software\Firmware\MAXQ2000>".\CmodJTAG.exe" -WMINIQUSB_b010549.hex -UV0x0403 -UP0x6001 -UD"Maxim MINIQUSB Command Module" -UI100 -US-
CmodJTAG standalone programmer Feb 10 2012 19:25:04
 __BORLANDC__=0x0530 __BCPLUSPLUS__=0x0530
 compiled with Borland C++ Builder 3.0
 [CMODJTAG_REVISION=00.01.20]
 [CMODCOMM_REVISION=01.01.81]
 [JTAG_DEBUG_TRACE=0]
 [JTAG_SUPPORT_MAXQ2000=1]
 [JTAG_SUPPORT_MAXQ20=1]
 [JTAG_SUPPORT_USB_MINIQUSB=1]
 [READ_ALL_AFTER_PROGRAMMING=0]
 [VERIFY_READBACK=0]
 [VERIFY_PROGRESSIVE_CRC_DURING_WRITE=1]

codebuf->Fill_Byte(0xFF);
databuf->Fill_Byte(0xFF);

command-line options (-? for help):
  opt_CmodComm_LogConsole = 0  opt_CmodComm_Log = 0  opt_CmodComm_Log_szFilename = debug.txt
  opt_interactive = 0  opt_auto_connect = 1
  opt_auto_reset_jtag = 1
  opt_load = 1
  opt_crc = 0  expected_crc16 = 0x0000
  opt_diagnostic_progressive_crc = 0  opt_TCK_Rate_Hz = 1e+07

  opt_filename = "MINIQUSB_b010549.hex"
  opt_addr = 0 = 0x0000
  opt_length = 65536 = 0x10000

  opt_interactive = 0
  opt_auto_connect = 1
  opt_auto_reset_jtag = 1
  opt_TCK_Rate_Hz = 1e+07 = 10 MHz
  opt_Load_And_Verify = 1


  Verify_Bootloader_Prompt success; 1 retries

JTAG_TAP_USB_MINIQUSB::Connect_MAXQ_Bootloader_Any_USB: FT232B on USB:0

  Bootloader_Banner = "MAXQ2000 Loader 1.02 05-24-2005 "

Only one MAXQ bootloader found,  FT232B on USB:0

Resetting target system...

Bootloader_Get_Status()...
  Verify_Bootloader_Prompt success; 1 retries

   Bootloader_Status_Flags = 0x01
     EEPROM-busy=0 CodeLock=0 WordModeSupported=0 WordMode=0 PasswordLock=1
   Bootloader_Status_Error = 0x00    Bootloader_ERROR_NONE

Bootloader_Get_Supported_Commands()...
   Bootloader_Supports_Command_76543210 = 0x7f
   Bootloader_Supports_Command_FEDCBA98 = 0x40
   Bootloader_Fixed_Code_Length = 0x00 (unknown)
   Bootloader_Fixed_Data_Length = 0x01 bytes
Bootloader supports command families 0 1 2 3 4 5 6 E
   0 Information
   1 Variable Length Load
   2 Variable Length Dump
   3 Variable Length CRC
   4 Variable Length Verify
   5 Variable Length Load & Verify
   6 Variable Length Erase
   E Fixed Length Erase

   These are the expected values for MAXQ2000

Bootloader_Get_Banner()...
  Bootloader_Banner = "MAXQ2000 Loader 1.02 05-24-2005 "

Bootloader_Get_Status()...
   Bootloader_Status_Flags = 0x01
     EEPROM-busy=0 CodeLock=0 WordModeSupported=0 WordMode=0 PasswordLock=1
   Bootloader_Status_Error = 0x00    Bootloader_ERROR_NONE

Bootloader_Get_Status()...
   Bootloader_Status_Flags = 0x01
     EEPROM-busy=0 CodeLock=0 WordModeSupported=0 WordMode=0 PasswordLock=1
   Bootloader_Status_Error = 0x00    Bootloader_ERROR_NONE

Bootloader_Get_Code_Size()...
   Bootloader_Code_Size = 0x0000 (unknown amount of memory)

Bootloader_Get_Data_Size()...
   Bootloader_Data_Size = 0x0000 (unknown amount of memory)
Intel_Hex_File_Buffer::Read_Intel_Hex_File performing _wstat(MINIQUSB_b010549.hex):
MINIQUSB_b010549.hex is an ordinary file.
MINIQUSB_b010549.hex is readable.
MINIQUSB_b010549.hex is writeable.
MINIQUSB_b010549.hex Size of file in bytes: 62306
MINIQUSB_b010549.hex Time file last opened: Mon Apr 04 15:40:46 2016


JTAG_Hardware* The_JTAG_Hardware:
  IR = 0x2 IR_INST_ICDEBUG
  DR_SPE = 0x001 SYSPROG_SRC_JTAG
  DR_BUG = 0x000 SYSPROG_NOP
  Mode_Is_Bootloader() == true

   Bootloader_Status_Flags = 0x01
     EEPROM-busy=0 CodeLock=0 WordModeSupported=0 WordMode=0 PasswordLock=1
   Bootloader_Status_Error = 0x00    Bootloader_ERROR_NONE

Intel_Hex_File_Buffer* codebuf:
  allocated_size = Length() = 0x10000
  loaded_addr_min = 0x0000
  loaded_addr_max = 0x9fbf
  buffer password area 0x0020-0x003F:
0x0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

Erasing target device...

  master erase time: 1.266 sec Elapsed time since start: 2.907 seconds (00:02)

Load And Verify Code:   addr=0x0000     count=128       remaining_count=0x9fc0
(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

(!)Bootloader_Get_Status() result[0] not 0x3E(!)

(!)result[0] = 0x04(!)
(!)result[1] = 0x00(!)
(!)result[2] = 0x00(!)
(!)result[3] = 0x00(!)
(!)Bootloader_Get_Status() returning kDcError - result[0] not 0x3E(!)

(!)Bootloader_Get_Status() returned kDcFatalError(!) -- retrying...

calling Device_CRC_Code(bootloader_addr=0x0000, bootloader_count=128)

        addr=0x0000     count=128       remaining_count=128...
        CRC (device) = 0xb2c8
        CRC (buffer) = 0x312a
*** Failed *** Device_CRC_Code(bootloader_addr=0x0000, bootloader_count=128)
 ~!~ retry ~!~
too many retries.

*** Fatal Error: Unable to write target code
Run time: 5.828 seconds (00:05)

Exit code = 40 EXIT_CODE_WRITE_FAILED

C:\Program Files (x86)\Maxim Integrated\MAX98090\Evaluation Software\Firmware\MAXQ2000>REM ~ if errorlevel 1 pause
Unplug USB cable to complete firmware update...

C:\Program Files (x86)\Maxim Integrated\MAX98090\Evaluation Software\Firmware\MAXQ2000>pause
Press any key to continue . . .

  • Hello, imcdonald,

    I'm searching for a solution to this for you.

    I have to say that this is the first time in the years that I've been supporting the product that I've heard of someone using that firmware update tool.

    I am currently getting into contact with our manufacturing group to find out what they use to flash the MAXQ2000 on new builds.

  • I've received the production procedure for flashing the MAXQ2000 firmware and they use the same tool and firmware included in the installation folder.

    I don't know if it may have anything to do with the failure, but please pay attention to step 1 and make sure that the MAX98090 software is not running while the flash procedure is being performed.

    MAXQ2000 Programming

    1. Verify that the APx software and MAX98090 software are NOT open.
    2. Open the test folder and double click the FWupdate.bat file.  This opens a command prompt.
    3. Follow the instructions in the command prompt window
    4. Once complete, the log window will display success or not
    5. Successful:
      1. The log window will show "EXIT_CODE_SUCCESS"
      2. A prompt to "Disconnect USB cable" should appear.  Disconnect the USB CONTROL cable and press any key.
      3. MAXQ2000 programming complete.  Board passed this Phase!
    6. Not successful:
      1. Close the command prompt and repeat this section one more time (starting at step1).
      2. Board programming was not successful for a second time -> Set this kit to the side for troubleshooting (place a note with the kit, indicating the type of failure).

    If this doesn't work, we can move on to further troubleshooting steps.

  • Thanks Ed. That is exactly the procedure we've followed, on multiple host machines. We get the EXIT_CODE_WRITE_FAILED every time.