-
Notifications
You must be signed in to change notification settings - Fork 46
Fault event codes
Fault events are non-recoverable fatal errors that result in a faulted ("screeching") Pod.
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
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 | 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 deliver 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 |