Repository navigation
A1 vs P2S flow dynamics calibration: P2S gets degraded single-pass cali with no retry #2
Description
A1 vs P2S flow dynamics calibration — detailed comparison
Following up on your Reddit comment about comparing the flow calibration gcode between A1 and P2S. Here's what the diff looks like.
1. Different calibration commands: M983 (A1) vs M983.3 (P2S)
A1:
M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]P2S:
M983.3 F{filament_max_volumetric_speed/2.4} A0.4These are different commands. The A1 uses M983 with an explicit nozzle diameter parameter (H[nozzle_diameter]). The P2S uses M983.3 without it. They also use different volumetric speed references (outer_wall_volumetric_speed vs filament_max_volumetric_speed). These are likely different firmware implementations of pressure advance calibration tailored to each hardware platform.
2. A1 verifies calibration success and retries — P2S does not
A1:
M983 F{...} A0.3 H[nozzle_diameter]
; ... wipe sequence ...
M1002 judge_last_extrude_cali_success ; ← check if it worked
M622 J0
M983 F{...} A0.3 H[nozzle_diameter] ; ← retry if failed
; ... wipe sequence ...
M623P2S:
M983.3 F{...} A0.4
M400
M106 P1 S255
M400 S5
M106 P1 S0
; done — no verification, no retryThe A1 uses M1002 judge_last_extrude_cali_success to check whether calibration succeeded and automatically retries if it didn't. The P2S has no such check — it runs the calibration once and moves on regardless of result.
3. A1 has an additional M984 pass — absent on P2S
After the main calibration + optional retry, the A1 runs:
M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4} H[nozzle_diameter]followed by another wipe sequence. This command is completely absent from the P2S gcode. Context suggests it's a fine-tuning or validation pass after the main M983 calibration.
4. A1 pre-extrudes before calibrating — P2S does not
A1:
G1 E10 F{outer_wall_volumetric_speed/2.4*60} ; ← prime extruder first
M983 F{...}P2S:
M983.3 F{...} ; ← straight into calibrationThe A1 extrudes 10mm of filament before running the calibration command, ensuring the filament path is primed and under consistent pressure. The P2S skips this step.
5. A1 has a visual calibration test line — P2S does not
Near the end of the A1 gcode there's an extrude_cali_test section that prints alternating fast/slow segments on the bed for visual inspection. The P2S has no equivalent — calibration results are invisible to the user.
Summary
| Feature | A1 | P2S |
|---|---|---|
| Calibration command | M983 + H param |
M983.3 no H |
| Speed reference | outer_wall_volumetric_speed |
filament_max_volumetric_speed |
| Pre-extrusion before cali | ✅ | ❌ |
| Verify result | ✅ judge_last_extrude_cali_success |
❌ |
| Auto-retry on failure | ✅ | ❌ |
Fine-tuning pass M984 |
✅ | ❌ |
| Visual test line on bed | ✅ | ❌ |
The P2S gets a simplified, single-pass calibration with no verification or retry. Given that the P2S is positioned above the A1 in the lineup and costs more, this looks like an oversight rather than an intentional tradeoff — especially since the hardware platform (load cells, toolhead sensors) should support the more robust A1-style flow. Worth raising with Bambu.
Activity
shrx commentedon Apr 1, 2026
Thanks for the detailed writeup. I actually dug into this comparison right before you posted, and your analysis matches my findings.
The speed reference difference may be intentional. The A1 calibrates at outer_wall_volumetric_speed (the speed used in the actual print), while the P2S calibrates at filament_max_volumetric_speed (the material's rated maximum). One optimizes for the current print, the other for the material's maximum capability.
The missing retry/M984/pre-extrusion is likely firmware-specific. M983.3 is probably newer command than the A1's M983. It's possible the P2S firmware handles priming, verification, and retry internally within M983.3, making the explicit G-code steps unnecessary. Without firmware source we can't confirm this, but it would explain why Bambu simplified the G-code rather than porting the A1's approach.
The hardcoded A0.4 without H[nozzle_diameter] does look like an oversight, given that the P2S supports multiple nozzle diameters.
However, all of this is speculation at this point and it's difficult to arrive to concrete conclusions without getting insight into the printer's firmware.
scoofz commentedon Apr 1, 2026
Yeah it agree, without access to a firmware it will be very difficult to learn more about the whole process. I'll take a peak at the H2C start gcode if we see a similar behavior. It we find the same way of dealing with the dynamic calibration, it will definitely tell us if there's something happening in the firmware side.
scoofz commentedon Apr 1, 2026
Update: H2D Pro comparison confirms firmware-side hypothesis
Comparing the H2D Pro start gcode (Bambu's current flagship, date 20250821) against both P2S and A1:
H2D Pro extrude cali section is identical to P2S:
No retry, no
M984, no pre-extrusion — same simplified single-passM983.3as P2S.This strongly suggests the difference isn't an oversight specific to P2S, but a deliberate architectural split: the A1 firmware exposes calibration success via
M1002 judge_last_extrude_cali_successand the retry/M984logic lives in the gcode. On P2S/H2D Pro,M983.3likely triggers a more self-contained firmware routine that handles verification and retry internally — the gcode just fires the command and trusts the firmware to handle the rest.Whether Bambu's firmware actually implements that robustness internally on P2S/H2D Pro is an open question — it could be equally robust, equally bare-bones, or something in between that we can't see from the gcode alone.
Also worth noting: the
M982.2 S1beforeM975 S1bug is present in the H2D Pro gcode too, confirming it affects at least all recent P-series and H-series machines, not just P2S.