


KITSRUS PROGRAMMER FIRMWARE PROTOCOL P018 AS OF 16 AUGUST 2004




BAUD SETUP = 19200,N,1



ON POWERUP PIC SENDS



  'B' (ASCII) + Firmware Type (Byte)



  Firmware Type List



    K128     = 0
    K149-A   = 1
    K149-B   = 2
    K150     = 3




WAIT FOR PROGRAMMER COMMAND START



  EXPECTING 'P' (ASCII)



  NO  - RETURNS 'Q' (ASCII) - Waits for new command start



  YES - RETURNS 'P' (ASCII)
        Monitors from command jump table



COMMAND JUMP TABLE (Byte)



   0 = Waits for new command start [0..24] [byte]
   1 = RETURNS 'Q' (ASCII) - Waits for new command start
   2 = Wait for next byte received and echo it back
       Stays at Command Jump Table
   3 = INITIALISE PROGRAMMING VARIABLES
       Expects Byte Values
        1 - ROM size High
        2 - ROM size Low
        3 - EEPROM size High
        4 - EEPROM size Low
        5 - Core Type
             0 = 18F6x2x
             1 = 18Fx230x330
             2 = 18Fxx2xx8
             3 = 16F87 88
             4 = 12C50x
             5 = 12C67x 16C50x 16Cxxx
             6 = 16C8x 16F8x 16F87x 16F62x
             7 = 16F7x 16F7x7
             8 = 12F67x
             9 = 16F87xA
            10 = 16F818
            11 = 16F57
            12 = 10Fxxx
        6 - Program Flags
              Bit 0 = 1, Chip has calibration value ROM word
              Bit 1 = 1, Chip has Band Gap value in FUSE
              Bit 2 = 1, Sets single panel access for 18F
              Bit 3 = 1, Execute very small delay between VCC on, then VPP on or
                                                  between VPP on and VCC on  
        7 - Program Delay
              (0 - 255) X 100uS
        8 - Power Sequence
              0 = VCC only
              1 = VCC then VPP1
              2 = VCC then VPP2
              3 = VPP1 then VCC
              4 = VPP2 then VCC
        9 - Erase Mode
              0 = 16C8x 16F8x 16F87x
              1 = 16F7x
              2 = 12F67x
              3 = I6F7x7
              4 = 18Fxxxx
              5 = 16F87xA F818 F87
              6 = 10Fxxx 
              7 = 16F57
       10 - Program Tries before programming fail
       11 - Over Program when programming succeeds



       FUNCTION RETURNS 'I' (ASCII)           
       Stays at Command Jump Table



   4 = TURN ON PROGRAMMING VOLTAGES
       FUNCTION RETURNS 'V' (ASCII)           
       Stays at Command Jump Table



   5 = TURN OFF PROGRAMMING VOLTAGES
       FUNCTION RETURNS 'v' (ASCII)           
       Stays at Command Jump Table



   6 = CYCLE PROGRAMMING VOLTAGES OFF THEN BACK ON
       FUNCTION RETURNS 'V' (ASCII)           
       Stays at Command Jump Table



   7 = PROGRAM ROM
       Then expects..
         ROM word count High  ----  ie. Chip ROM size
         ROM word count Low
         RETURNS 'Y' (ASCII)
         Then expects 32 bytes of ROM data High Byte - Low Byte
         Fills Buffer_A
         RETURNS 'Y' (ASCII)
         Then expects 32 bytes of ROM data High Byte - Low Byte
         Fills Buffer_B in background as it is received


       Programming ROM Loop
         Program ROM with data
         if no programming error
           All ROM Programmed?
             Y - RETURNS 'YP' (ASCII)
                 Stays at Command Jump Table
             N - Buffer A or B empty?
                   Y - Send 'Y' for another 32 bytes of data
                 Continue at Programming ROM Loop
         else
           RETURNS 'N' (ASCII)
                   Current Address High
                   Current Address Low
           Stays at Command Jump Table



   8 = PROGRAM EEPROM
       Then expects..
         EEPROM byte count High
         EEPROM byte count Low
         (NOTE: function expects an EVEN count of bytes
                and byte count must be 2 more than required)
       RETURNS 'Y' (ASCII)
       Programming EEPROM Loop
         Then expects..
           EEPROM byte x
           EEPROM byte x + 1
         Byte count reached...
           Y - RETURNS 'P' (ASCII)
               Stays at Command Jump Table
           N - RETURNS 'Y' (ASCII)
               Programs 2 EEPROM locations
               Continue at Programming EEPROM Loop


   9 = PROGRAM ID FUSES
       Then expects...
         '0' '0' (ASCII)
         14 bit PIC - ID1 ID2 ID3 ID4 'F' 'F' 'F' 'F' (ASCII)
                      FUSE Value Low
                      FUSE Value High
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
                      0xFF (Byte)
            Programs ID and FUSE
            RETURNS 'Y' (ASCII)
            Stays at Command Jump Table
         or
         16 bit PIC - ID1 ID2 ID3 ID4 1D5 1D6 1D7 1D8 (ASCII)
                      FUSE1 Value Low
                      FUSE1 Value High
                      FUSE2 Value Low
                      FUSE2 Value High
                      FUSE3 Value Low
                      FUSE3 Value High
                      FUSE4 Value Low
                      FUSE4 Value High
                      FUSE5 Value Low
                      FUSE5 Value High
                      FUSE6 Value Low
                      FUSE6 Value High
                      FUSE7 Value Low
                      FUSE7 Value High
            Programs ID
            RETURNS 'Y' (ASCII)
            Stays at Command Jump Table



  10 = PROGRAM CALIBRATION
       Then expects...
         Calibration High (Byte)
         Calibration Low  (Byte)
         FUSE High (Byte)
         FUSE Low  (Byte)
       CALIBRATION ERROR RETURNS 'C' (ASCII)
       FUSE ERROR RETURNS 'F' (ASCII)
       NO ERRORS RETURNS 'Y' (ASCII)
       Stays at Command Jump Table



  11 = READ ROM
       RETURNS ALL ROM DATA UP UNTIL ADDRESS SPECIFIED
       WHEN INITIALISING VARIABLES IN HIGH/LOW FORMAT
       Stays at Command Jump Table



       If a byte is received during transfer, it stops and
       stays at Command Jump Table



  12 = READ EEPROM



       RETURNS ALL EEPROM DATA UP UNTIL ADDRESS SPECIFIED
       WHEN INITIALISING VARIABLES
       Stays at Command Jump Table



       If a byte is received during transfer, it stops and
       stays at Command Jump Table



  13 = READ CONFIGURATION
       RETURNS
       'C'       (ASCII)
       ChipID_L  (Byte)
       ChipID_H  (Byte)
       ID1       (Byte)
       ID2       (Byte)
       ID3       (Byte)
       ID4       (Byte)
       ID5       (Byte)
       ID6       (Byte)
       ID7       (Byte)
       ID8       (Byte)
       Fuse1_L   (Byte)
       Fuse1_H   (Byte)
       Fuse2_L   (Byte) can also be CAL word #1 or address 0x2008, or 10Fxxx Backup CAL word
       Fuse2_H   (Byte)
       Fuse3_L   (Byte) can also be CAL word #2 or address 0x2009
       Fuse3_H   (Byte)
       Fuse4_L   (Byte)
       Fuse4_H   (Byte)
       Fuse5_L   (Byte)
       Fuse5_H   (Byte)
       Fuse6_L   (Byte)
       Fuse6_H   (Byte)
       Fuse7_L   (Byte)
       Fuse7_H   (Byte)
       Calibrate_L   (Byte)
       Calibrate_H   (Byte)
       Stays at Command Jump Table



       NOTE: Data fields are filled depending on chip type else are 0xFF



  14 = READ CALIBRATION
       RETURNS
       Calibrate_H   (Byte)
       Calibrate_L   (Byte)
       Stays at Command Jump Table



  15 = ERASE CHIP
       RETURNS 'Y' (ASCII)



  16 = ERASE CHECK ROM
       Then expects...
         High byte of blank ROM
         Eg 0x3F 14 bit PIC
            0xFF 16 bit PIC



       All ROM checked?
       NO
         RETURNS
         0xFF (Byte) after every 256 words checked
       YES
         RETURNS
         ALL BLANK 'Y' (ASCII)
         NOT BLANK 'N' (ASCII)
         Stays at Command Jump Table



  17 = ERASE CHECK EEPROM
       RETURNS
       ALL BLANK 'Y' (ASCII)
       NOT BLANK 'N' (ASCII)
       Stays at Command Jump Table



  18 = PROGRAM 18Fxxxx FUSE
       RETURNS 'Y' (ASCII)
       Stays at Command Jump Table



  19 = CHIP IN SOCKET DETECT
       RETURNS 'A' (ASCII)



       IF CHIP IS DETECTED IN PROGRAMMING SOCKET
         RETURNS 'Y'
         Waits for new command start



  20 = CHIP OUT OF SOCKET DETECT
       RETURNS 'A' (ASCII)



       IF CHIP IS DETECTED OUT OF PROGRAMMING SOCKET
         RETURNS 'Y'
         Waits for new command start



  21 = GET VERSION
       RETURNS
         K128     = 0  (Byte)
         K149-A   = 1  (Byte)
         K149-B   = 2  (Byte)
         K150     = 3  (Byte)



  22 = GET PROTOCOL
       RETURNS - Protocol number.



         Eg 'P013' (ASCII)



  23 = PROGRAM DEBUG VECTOR
       Then expects...
         High address of DEBUG vector   (Byte)
         Mid  address of DEBUG vector   (Byte)
         Low  address of DEBUG vector   (Byte)
       RETURNS
         Suceeded  'Y'  (ASCII)
         Failed    'N'  (ASCII)



  24 = READ DEBUG VECTOR
       RETURNS
         0xEF                           (Byte)
         High address of DEBUG vector   (Byte)
         Mid  address of DEBUG vector   (Byte)
         Low  address of DEBUG vector   (Byte)


  25 = PROGRAM CAL DATA FOR 10Fxxx
       Then expects...
         Calibration High (Byte)
         Calibration Low  (Byte)
         Backup Calibration High (Byte)
         Backup Calibration Low  (Byte)
       CALIBRATION ERROR RETURNS 'C' (ASCII)
       BACKUP CALIBRATION ERROR RETURNS 'B' (ASCII)
       NO ERRORS RETURNS 'Y' (ASCII)
       Stays at Command Jump Table
        