Skip to content
Joe Moran edited this page Nov 3, 2020 · 45 revisions

Fault events are non-recoverable fatal errors that result in a faulted ("screeching") Pod.

Important sidenote:

Pods always perform 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 tone (i.e., it "screams") until the Pod is successfully deactivated or a paper clip or other similar item is used to press down on the manual alarm shut-off port found by peeling back the adhesive pad from the bottom of the Pod at the square end to the right of the fill port.

During Loop testing, there were a number of failures on the third day due to a particular class of additional safety checks that are more likely to occur with lower battery levels. For these checks involving a suspected fault condition, the Pod needs to deliver a pulse within 30 minutes or else the Pod will fault. This was mostly due to the much higher number of commands we are issuing to the Pod that increase the odds for these conditions to occur (typically lower battery levels along with periods of decreased temp basal rates). To solve this a new Pod starts with a Configure Delivery Flags command that ignores ONLY these checks which use a 30 minute recovery pulse. These are the 096-106 errors which we had mostly near the end of development of the Loop testing.

All fault event codes that have been found in the Pod's firmware are also located here which are used in the Loop Report created by doing an Issue Report when a Pod faults:

https://github.com/ps2/rileylink_ios/blob/omnipod-testing/OmniKit/Model/FaultEventCode.swift

There is also another wiki describing PDM Pod errors: https://forum.fudiabetes.org/t/omnipod-alarm-explanations/3022

PDM fault codes

Omnipod alarm codes on the PDM are displayed under Alarm History. The alarm number is a sequence of 2 digits, followed by 5 digits, followed by another 5 digits, and ending with 3 digits.

XX-12345-12345-YYY

The only numbers that matter are the first 2 (XX) and the last 3 (YYY). The middle two sets of numbers are something internal to Insulet and they don’t seem to have anything to do with actually identifying the failure.

There are only 3 different prefixes (XX) used at the beginning telling the general type of error.

  • 17 - Occlusion
  • 19 - Pod error
  • 11 - PDM error

The last 3 digits (YYY) are somewhat nebulous because Insulet tech support is not part of the Insulet company, it is outsourced. There is a very unofficial list that was derived on how to explain errors from previous discussions with tech support reps listed in the table below. The digit YYY decimal value should for non-PDM faults be the same values as displayed in the current Replace Pod screen for Internal Pod faults.

Normal Pod use can result in these 3 internal Pod faults.

  • Pod expired: 028
  • Empty reservoir: 024
  • Occlusion detected: 020, 090, 096, 097, 098, 102, 103, 104, 105, 106

In other cases you can use the description derived from Insulet tech support or just call it a Pod Error.

Internal Pod Fault Hex Pod Firmware Discovery Derived Tech Support Description
000 0x00 Not used by Pod firmware for error, PDM only mapping? Occlusion
001 0x01 Flash erase failed
002 0x02 Flash store failed
003 0x03 Basal subcommand table corruption
004 0x04
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
009 0x09
010 0x0A Corruption in byte_BF0
011 0x0B Temp basal subcommand table corruption
012 0x0C
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, insulin delivery stopped
017 0x11 Corruption in byte_866
018 0x12 Reset due to Low Voltage Detect, more likely on 3rd 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, insulin delivery stopped
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
036 0x24
037 0x25 RTC interrupt handler unexpectedly called
038 0x26
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
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 3rd day of use due to low batteries Static electricity
053 0x35
054 0x36 Flash initialization error
055 0x37
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
063 0x3F
064 0x40 validate_encoder_count too high, 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, insulin delivery stopped
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 and not on the site
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 for occlusion detection 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, Occlusion detected
097 0x61 big_routine_1 startup problem 2, Occlusion detected
098 0x62 big_routine_1 excess timeouts 1, Occlusion detected
099 0x63
100 0x64
101 0x65
102 0x66 big_routine_1 excess timeouts 2, Occlusion detected Insulin delivery has stopped, change site
103 0x67 big_routine_1 excess timeouts 3, Occlusion detected Insulin delivery has stopped, change site
104 0x68 big_routine_1 pulse issue, Occlusion detected Insulin delivery has stopped, change site
105 0x69 big_routine_1 bolus problem, Occlusion detected Insulin delivery has stopped, change site
106 0x6A big_routine_1 above threshold, Occlusion detected Insulin delivery has stopped, change site
107 0x6B
108 0x6C
109 0x6D
110 0x6E
111 0x6F
112 0x70
113 0x71
114 0x72
115 0x73
116 0x74
117 0x75
118 0x76
119 0x77
120 0x78
121 0x79
122 0x7A
123 0x7B
124 0x7C
125 0x7D
126 0x7E
127 0x7F
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
140 0x8C
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
148 0x94
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
Clone this wiki locally