-
Notifications
You must be signed in to change notification settings - Fork 46
Fault event codes
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 |
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.