Skip to content
Joe Moran edited this page Jan 28, 2021 · 45 revisions

The document discusses the fault codes generated by the Pod on failures while the PDM Ref codes document discusses how the detailed Type 2 Pod info response returned on Pod faults with the fault code is used to generate PDM Ref Codes to create an encoded description of a particular Pod failure instance.

Pods are continually performing a variety of safety checks and if a potential problem is found, the Pod will enter a fault state where all insulin delivery is halted and the Pod emits a continuous screeching tone (i.e., it becomes a "screamer") until the Pod is successfully deactivated or a paper clip or other similar item is used to press on the manual alarm shut-off port on the bottom of the Pod. The alarm shut-off port is on the opposite side of the fill port and can be found by peeling back the adhesive pad from the bottom of the Pod at the square end. There is a unique byte code returned for each type of pod internal error fault as described in the table below.

For an Empty reservoir failure the Pod generates an 024 fault code and for an Pod expired (80 hours) failure the Pod generates an 028 fault code, but neither of these fault codes are ever actually displayed by the PDM or the Loop app. The PDM and the Loop app also don't display the fault code for an occlusion fault, but the PDM will treat only an 020 fault as an occlusion fault while the Loop app traditionally also treated an additional 9 fault codes (090, 096, 097, 098, 102, 103, 104, 105, 106) as occlusion faults. See PDM Ref Codes for more detailed discussion on occlusion fault handling and how occlusion faults are used in PDM Ref codes.

The known Pod fault codes are listed in the following table as both decimal and hex values in numeric order. The firmware discovery interpretations were obtained from an examination of the Pod firmware as obtained from this Loop Swift source file. This table also includes some additional information obtained from previous discussions with Insulet tech support reps for selected fault codes as reported in this FUDiabetes article. Values not shown indicates that this fault code was not found in the reference 2.7.0 Pod firmware nor was there any additional information on this fault code derived from Insulet tech support.

Internal Pod Fault Hex Value Pod Firmware Discovery Derived Insulet Tech Support Description
000 0x00 Not used by Pod firmware for error, used for PDM display for occlusions (AA == 17) Occlusion
001 0x01 Flash erase failed
002 0x02 Flash store failed
003 0x03 Basal subcommand table corruption
005 0x05 Corruption in byte_720
006 0x06 Data corruption error in test_RTC_interrupt or BE3 pump table
007 0x07 RTC interrupt handler called with inconsistent state
008 0x08 Bad value > 8
010 0x0A Corruption in byte_BF0
011 0x0B Temp basal subcommand table corruption
013 0x0D Reset due to COP
014 0x0E Reset due to illegal opcode
015 0x0F Reset due to illegal address
016 0x10 Reset due to SAWCOP Safety check
017 0x11 Corruption in byte_866
018 0x12 Reset due to Low Voltage Detect, more likely on third day of use due to low batteries Static electricity
019 0x13 Message length too long
020 0x14 Problem in big_routine_3 Occlusion detected
021 0x15 Corruption in word_129 table/word_86A/dword_86E
022 0x16 Corruption in byte_868 Safety check
023 0x17 Corruption in a validated table
024 0x18 Reservoir empty or exceeded maximum pulse delivery Empty reservoir
025 0x19 Bad Power Switch Array Status and Control Register value 1 before starting pump
026 0x1A Bad Power Switch Array Status and Control Register value 2 before starting pump
027 0x1B Bad LOADCNTH value when running pump
028 0x1C Exceeded maximum Pod life of 80 hours Pod expired
029 0x1D Unexpected internal state command_1A_schedule_parse_routine_wrapper
030 0x1E Unexpected commissioned state in status and control register upon reset
031 0x1F Sum mismatch for word_129 table
032 0x20 Validate encoder count error when bolusing
033 0x21 Bad timer variable state
034 0x22 Unexpected RTC Modulo Register value during reset
035 0x23 Problem in calibrate_timer_case_3
037 0x25 RTC interrupt handler unexpectedly called
039 0x27 Failed to set up 2 hour alert for tank fill operation
040 0x28 Bad arg or state in update_insulin_variables, verify_and_start_pump or main_loop_control_pump
041 0x29 Alert #0 auto-off timeout Auto-off
042 0x2A Alert #1 auto-off timeout
043 0x2B Alert #2 auto-off timeout
044 0x2C Alert #3 auto-off timeout
045 0x2D Alert #4 auto-off timeout
046 0x2E Alert #5 auto-off timeout
047 0x2F Alert #6 auto-off timeout
048 0x30 Alert #7 auto-off timeout
049 0x31 Incorrect pod state for command or error during insulin command setup
050 0x32 Bad value during startup testing
051 0x33 Connected Pod command timeout
052 0x34 Reset from unknown cause, more likely on third day of use due to low batteries Static electricity
054 0x36 Flash initialization error
056 0x38 Unexpected byte_358 value
057 0x39 Problem with LOAD1/LOAD2
058 0x3A A > 7 in message processing
059 0x3B SAW reset testing fail
060 0x3C 402D is 'Z' - test in progress
061 0x3D Problem with pump anchor
062 0x3E Flash initialization or write error
064 0x40 validate_encoder_count too high, possible occlusion, generally seen during bolus on 3rd day with depleted batteries Interruption in the flow of insulin
065 0x41 validate_encoder_count excessive variance
066 0x42 validate_encoder_count too low Safety check, delivery problem inside the Pod and not on the site
067 0x43 validate_encoder_count problem
068 0x44 check_LOAD_voltage open wire 1 problem Unlabeled per tech support
069 0x45 check_LOAD_voltage open wire 2 problem Software or hardware failure in Pod
070 0x46 Problem with LOAD1/LOAD2
071 0x47 Problem with LOAD1/LOAD2
072 0x48 Bad timer calibration
073 0x49 Bad timer values, COP timer ratio bad
074 0x4A Bad timer values
075 0x4B ICS trim too close to 0x1FF
076 0x4C find_best_trim_value problem
077 0x4D Bad set_TPM1_multi_cases value
078 0x4E SAW trim error Safety check, delivery problem inside the Pod
079 0x4F Unexpected TXSCR2 RF Transmission Error Flag set during reset
080 0x50 Static electricity
081 0x51 Bad check_SDIRH and byte_11F state before starting pump
082 0x52 TXOK issue in process_input_buffer
083 0x53 Wrong word_107 value during input message processing
084 0x54 Packet frame length too long
085 0x55 Unexpected IRQ high in timer_tick
086 0x56 unexpected IRQ low in timer_tick
087 0x57 Corrupt constants table at byte_37A[] or flash byte_4036[]
088 0x58 Bad argument to update_37A_table
089 0x59 Error updating constants byte_37A table
090 0x5A big_routine_1 too high, possible occlusion Possible occlusion
091 0x5B Load table corruption
092 0x5C Prime open count too low Problem with a safety check occurred
093 0x5D Bad byte_109 value
094 0x5E Write flash byte to disable flash security failed
095 0x5F Two check_LOAD_voltage failures before starting pump
096 0x60 big_routine_1 startup problem 1, possible occlusion
097 0x61 big_routine_1 startup problem 2, possible occlusion
098 0x62 big_routine_1 excess timeouts 1, possible occlusion
102 0x66 big_routine_1 excess timeouts 2, possible occlusion
103 0x67 big_routine_1 excess timeouts 3, possible occlusion Change site
104 0x68 big_routine_1 pulse issue, possible occlusion Change site
105 0x69 big_routine_1 bolus problem, possible occlusion Change site
106 0x6A big_routine_1 above threshold, possible occlusion Change site
128 0x80 Basal under infusion
129 0x81 Basal over infusion
130 0x82 Temp basal under infusion
131 0x83 Temp basal over infusion
132 0x84 Bolus under infusion
133 0x85 Bolus over infusion
134 0x86 Basal over infusion pulse
135 0x87 Temp basal over infusion pulse
136 0x88 Bolus over infusion pulse
137 0x89 Immediate bolus under infusion pulse
138 0x8A Extended bolus over infusion pulse
139 0x8B Corruption of $283/$2E3/$315 tables
141 0x8D Bad input value to verify_and_start_pump
142 0x8E Pump request 5 with basal IST not set or temp basal IST set
143 0x8F Command $1A parse routine unexpected failed
144 0x90 Bad value for $283/$2E3/$315 table specification
145 0x91 Pump request 1 with temp basal IST not set
146 0x92 Pump request 2 with temp basal IST not set
147 0x93 Pump request 3 and bolus IST not set when about to pulse
149 0x95 Bad table specifier in 1A insulin command
150 0x96 Bad variable state in clear_Bolus_IST2_and_vars
151 0x97 Bad variable state in maybe_inc_33D

Note on Loop Pod Faults

During early Omnipod Loop testing, there were a number of failures on the third day due to a particular class of additional Pod safety checks. For these checks involving a questionable Pod pulse state, the Pod needs to deliver a pulse within the next 30 minutes to possibly clear this condition or else the Pod will fault. Closed loop use requires a higher number of commands (which increases the Pod battery load) and can invoke zero or reduced basal rates for extended periods which increases the odds for these conditions to occur. The Loop app uses a Configure Delivery Flags command to disable these particular checks involving the 30 minute recovery window which effectively inhibits the 096-106 Pod faults from ever occurring.

Clone this wiki locally