The BBP firmware (unicorn) is based on the RepRap firmware, Marlin.
Marlin’s leading developer is Evdz and bkuicek, though many others contribute with their patches.


  • Queue buffer based movement with real linear acceleration.
  • High step rate.
  • Look ahead, keep the speed high when possible.
  • Full endstop support.
  • SD card and U mass storage support.
  • EEPROM storage of parameters, such as max-velocity, max-acceleration, and similar variables.
  • Dynamic temperature set point.
  • Endstop trigger reporting to the host software.
  • Heater power reporting
  • CoreXY kinematics
  • Delta kinematics
  • Auto bed leveling.
  • 32bit distance, it can print a building.

gcode command

The BBP firmware supports the following gcode commands:
You can send gcode command by terminal

G commands

G0: Rapid linear move
G1: Linear move

G10: Retract
G11: Retract recover
G28: Move to Origin, homing axis
G29: Auto leveling, detailed Z-Probe, probes the bed at 3 or more points. Will failed if you haven't homed yet
1.G29 will only probe, don't save result.
2.G29 S1, probe only once if don't have saved result, will save result and don't probe any more.
3.M503 A0 delete saved result and it will lead to make "G29 S1" running a time.
4.M503 A1 show saved result.
G30: Single Z-Probe, probes bed at current XY location
G31: Disable Proximity sensor work
G32: Enable Proximity sensor work

G90: Set to Absolute coordinates
G91: Set to Relative coordinates
G92: Set Position

M commands:

M17: Enable/Power all stepper motors
M18: Disable all stepper motors
M104: Set extruder target temperature
M105: Read current temperature
M106: Fan on -> Fan_1, Fan_2
1. Fan1: M106 P1 S255 or M106 S255 , pwm 0~ 255
2. Fan2: M106 P2 S255 , pwm 0~ 255
M107: Fan off -> Fan_1, Fan2
1. Fan1: M107 P1 or M107
2. Fan2: M107 P2

M109: Set extruder temperature and wait
M110: Set current Line Number
M111: Set debug level
M114: Get current position
M115: Get firmware version and capabilities
M119: Get endstop status
M140: Set bed temperature
M150: Set led light level Fan_4, Fan_5, Fan_6
M150 R<0~255>, G<0~255>, B<0~255> R stand for Fan_4, G stand for Fan_5, B stand for Fan_6

M190: Waiting for bed temperature to reach target temperature

M82: Set E codes absolute.
M83: Set E codes relative while in absolute coordinate mode.
M84: Stop printing.

M92: Set axis step per unit.

M176: Enable Fan_3.
M177: Disable Fan_3.

M201: Set max printing acceleration.
M202: Set max travel acceleration.
M203: Set maximum federate.
M204: Set default acceleration.
M205: Advanced setting.
M206: Set additional homing offset.
M207: Set retract length.
M208: Set recover/unretract length.

M210: Set homing federate.
M218: Set hotend offset.
M220: Set speed factor override percentage

M301: Set extruder PID parameters.
M303: Run PID tunning.
M303 E<target> S<temperature> C<cycles>
1.M303 E0 S210 C3, auto tune extruder0, target temperature 210, cycle is 3
2.M303 E-1 S60 C3, auto tune bed, target temperature 60, cycle is 3
3.M303 E-1 S60 C3 W1, auto tune bed, target temperature 60, cycle is 3, enable max pwm heater, , don't have limit from Octorpint profile "Max heat pwm"

M304: Set HBP PID parameters.

M355: Turn Led light on/off, Fan_4, Fan_5,Fan_6.
M400: Wait for current moves to finish.
M401: Lower Z-probe
M402: Raise Z-probe

M500: Store parameters in EEPROM.
M501: Read parameters from EEPROM.
M502: Revert to the default factory settings.
M503: Printing parameter settings.
1.M503 show all parameter settings.
2.M503 A0 delete saved auto leveling result.
3.M503 A1 show saved auto leveling result.

M600: Printing pause.
M601: Printing resume.
M666: Set delta configuration.
1. M666 Axx Bxx Cxx Ixx Jxx Kxx
xx stand for tower_X_radius_adj, tower_Y_radius_adj, tower_Z_radius_adj, tower_X_diagonal_rod_adj, tower_Y_diagonal_rod_adj, tower_Z_diagonal_rod_adj
2. M666 Dxx Hxx Sxx Rxx Pxx
xx stand for diagonal_rod, z_home_pos, segments_per_second, physic radius, avaival print radius
3. M666 Xxx Yxx Zxx
xx stand for endstop_adj_x , endstop_adj_y, endstop_adj_z
3. M666 L
print parameter list

M906: Set motor currents, (mA).
M907: Set motor current, (raw).
M908: Whether enable HBP or not.
M909: Set microstepping.

M910: finish sending parameters.
M911: Whether enable auto current adjust or not.
M912: Whether enable auto slow down or not.
M913: Set up machine type.
M914: Set servo endstop angle.
M1009:Configurate gpio
1. M1009 Gxx Oxx Lxx
G: gpio number
O: 1 for output, 0 for input
L: 1 for output high level, 0 for output low level
S: show voltage level
extend interface gpio, please see here
For example
*set GPIO1_18 output low level.
GPIO1_18 gpio number is 1 X 32 + 18 = 60
M1009 G60 O1 L0

*set GPIO0_20 input mode.
GPIO0_20 gpio number is 0 X 32 + 20 = 20
M1009 G20 O0 L0

*get GPIO0_20 level.
GPIO0_20 gpio number is 0 X 32 + 20 = 20
M1009 G20 S1

TODO command list:
G2: Clockwise Arc move
G3: Counter-Clockwis Arc move
G4: Dwell

M85: Set inactivity shutdown timeout.
M93: Send axis step per unit value to host.
M200: Set filament diameter and set E axis units to cubic millimeters.
M209: Enable automatic retract.
M221: Set extrude factor override percentage

M280: Set servo position

M404: Filament width and nozzle diameter.
M405: Filament Sensor on.
M406: Filament Sensor off.
M407: Display filament diameter.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License