<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.iagent.no/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jon</id>
	<title>iagent - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.iagent.no/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jon"/>
	<link rel="alternate" type="text/html" href="https://wiki.iagent.no/wiki/Special:Contributions/Jon"/>
	<updated>2026-05-07T11:22:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Retool_A2&amp;diff=1619</id>
		<title>Retool A2</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Retool_A2&amp;diff=1619"/>
		<updated>2025-10-10T14:12:21Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Wire diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Retool and Resend A2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Description==&lt;br /&gt;
Retool A2 is a USB based tool head that works well with Recore. It has &lt;br /&gt;
* 1 TMC2209 stepper motor driver for an extruder&lt;br /&gt;
* 1 ADXL343 accelerometer for input shaping&lt;br /&gt;
* 1 Mosfet for a heater&lt;br /&gt;
* 1 Input for thermistor&lt;br /&gt;
* 3 Fan outputs with tach feedback&lt;br /&gt;
* 1 Peltier cooling output&lt;br /&gt;
* 1 inductive probe input&lt;br /&gt;
* 1 Neopixel output&lt;br /&gt;
* 2 End stop inputs&lt;br /&gt;
* USB-C with Power delivery, up to 24 V, 5 A. &lt;br /&gt;
It comes with Resend A2&lt;br /&gt;
* 24 V injector&lt;br /&gt;
* USB Power delivery&lt;br /&gt;
* Over current protection&lt;br /&gt;
==Shematics==&lt;br /&gt;
[https://github.com/intelligent-agent/Recore/blob/master/Schematics/Retool_A2.pdf Retool_A2]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://github.com/intelligent-agent/Recore/blob/master/Schematics/Resend_A2.pdf Resend_A2]&lt;br /&gt;
&lt;br /&gt;
==Pinout diagram==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Retool A2 pinout diagram 1.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Pinout table==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! Name !! GPIO !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! GPIO !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! GPIO !! Number&lt;br /&gt;
|-&lt;br /&gt;
| STEP || GPIO6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 6 || END STOP 1 || GPIO4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 4 || FAN 1 PWM || GPIO1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| DIR || GPIO5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 5 || END STOP 2 || GPIO11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 229 || FAN 2 PWM || GPIO12 || 12&lt;br /&gt;
|-&lt;br /&gt;
| ENN || GPIO10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 10 || NEOPIXEL || GPIO20 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 230 || FAN 3 PWM || GPIO21 || 21&lt;br /&gt;
|-&lt;br /&gt;
| CLK || GPIO8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 8 || NEOPIXEL DIR || GPIO19 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 231 || HEATER PWM || GPIO0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| DIAG || GPIO9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || PELTIER EN || GPIO14 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 232 || THERM 1 || GPIO28 || 28&lt;br /&gt;
|-&lt;br /&gt;
| UART || GPIO7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || PELTIER V || GPIO2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 233 || CURRENT MEASURE || GPIO29 || 29&lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||style=&amp;quot;border-right:solid 2px;&amp;quot;|  || INDUCTIVE || GPIO19 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 19 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Wire diagram==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Retool A2 wire diagram.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note about fan outputs: the middle pin is meant to be a tachometer input only. If you only have 2 wires, use only the pins labelled + and -.&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
3D model for using Retool A2 with Voron 2.4/Stealthburner&lt;br /&gt;
https://www.printables.com/model/1190587-voron-24-retool-a2-holder&lt;br /&gt;
&lt;br /&gt;
==Klipper config==&lt;br /&gt;
[[File:Scheamtics.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[mcu retool]&lt;br /&gt;
serial: /dev/serial/by-id/usb-Klipper_rp2040_E661AC8863905924-if00&lt;br /&gt;
&lt;br /&gt;
[static_digital_output retool_led]&lt;br /&gt;
pins: retool:gpio2&lt;br /&gt;
&lt;br /&gt;
[output_pin fan_r_1]&lt;br /&gt;
pin: retool:gpio1&lt;br /&gt;
&lt;br /&gt;
[output_pin fan_r_2]&lt;br /&gt;
pin: retool:gpio12&lt;br /&gt;
&lt;br /&gt;
[output_pin fan_r_3]&lt;br /&gt;
pin: retool:gpio21&lt;br /&gt;
&lt;br /&gt;
[tmc2209 extruder3]&lt;br /&gt;
uart_pin: retool:gpio7&lt;br /&gt;
uart_address: 0&lt;br /&gt;
run_current: 0.500&lt;br /&gt;
hold_current: 0.500&lt;br /&gt;
sense_resistor: 0.1&lt;br /&gt;
stealthchop_threshold: 250&lt;br /&gt;
&lt;br /&gt;
#endstop_pin: retool:gpio4&lt;br /&gt;
#enable_pin: !retool:gpio10&lt;br /&gt;
#rotation_distance: 40&lt;br /&gt;
#microsteps: 16&lt;br /&gt;
#position_endstop: 0&lt;br /&gt;
#position_max: 200&lt;br /&gt;
#homing_speed: 20.0&lt;br /&gt;
&lt;br /&gt;
[extruder3]&lt;br /&gt;
step_pin: retool:gpio6&lt;br /&gt;
dir_pin: retool:gpio5&lt;br /&gt;
heater_pin: retool:gpio0&lt;br /&gt;
sensor_type: EPCOS 100K B57560G104F&lt;br /&gt;
sensor_pin: retool:gpio28&lt;br /&gt;
rotation_distance: 40&lt;br /&gt;
microsteps: 16&lt;br /&gt;
nozzle_diameter: 0.400&lt;br /&gt;
filament_diameter: 1.75&lt;br /&gt;
control: pid&lt;br /&gt;
pid_Kp: 22.2&lt;br /&gt;
pid_Ki: 1.08&lt;br /&gt;
pid_Kd: 114&lt;br /&gt;
min_extrude_temp: 30&lt;br /&gt;
min_temp: -272&lt;br /&gt;
max_temp: 300&lt;br /&gt;
&lt;br /&gt;
[verify_heater extruder3]&lt;br /&gt;
check_gain_time: 2400&lt;br /&gt;
&lt;br /&gt;
[adc_temperature retool_fan_current_0]&lt;br /&gt;
temperature1: 0&lt;br /&gt;
voltage1: 0&lt;br /&gt;
temperature2: 33&lt;br /&gt;
voltage2: 3.3&lt;br /&gt;
&lt;br /&gt;
[temperature_sensor retool_fan_current_0]&lt;br /&gt;
adc_voltage: 3.3&lt;br /&gt;
sensor_pin: remote:gpio29&lt;br /&gt;
sensor_type: remote_fan_current_0&lt;br /&gt;
max_temp: 2.0&lt;br /&gt;
gcode_id: RemoteFanCurrent0&lt;br /&gt;
&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: remote:gpio25&lt;br /&gt;
spi_bus: spi1c&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
    &lt;br /&gt;
[probe]&lt;br /&gt;
pin: remote:gpio22&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
x_offset: 0&lt;br /&gt;
y_offset: 25.0&lt;br /&gt;
z_offset: 0	&lt;br /&gt;
speed: 10.0&lt;br /&gt;
samples: 3&lt;br /&gt;
samples_result: median&lt;br /&gt;
sample_retract_dist: 3.0&lt;br /&gt;
samples_tolerance: 0.01&lt;br /&gt;
samples_tolerance_retries: 3&lt;br /&gt;
&lt;br /&gt;
# Set this high to use GPIO20 as high frequency input&lt;br /&gt;
[static_digital_output Relit_direction]&lt;br /&gt;
pins: !remote:gpio19&lt;br /&gt;
&lt;br /&gt;
[neopixel relit]&lt;br /&gt;
pin: remote:gpio20&lt;br /&gt;
chain_count: 12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[fan peltier]&lt;br /&gt;
pin: remote:gpio3&lt;br /&gt;
max_power: 0.1&lt;br /&gt;
cycle_time: 0.00001 #0.01&lt;br /&gt;
hardware_pwm: True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serial: /dev/serial/by-id/usb-Klipper_rp2040_E66368651B257D22-if00&lt;br /&gt;
&lt;br /&gt;
[static_digital_output remote_led]&lt;br /&gt;
pins: remote:gpio2&lt;br /&gt;
&lt;br /&gt;
[static_digital_output nepixel_dir]&lt;br /&gt;
pins: !remote:gpio19&lt;br /&gt;
&lt;br /&gt;
[fan]&lt;br /&gt;
pin: remote:gpio21&lt;br /&gt;
tachometer_pin: remote:gpio23&lt;br /&gt;
cycle_time: 0.10&lt;br /&gt;
&lt;br /&gt;
[fan_generic peltier]&lt;br /&gt;
pin: remote:gpio3&lt;br /&gt;
hardware_pwm: True&lt;br /&gt;
cycle_time: 0.000001&lt;br /&gt;
&lt;br /&gt;
[heater_fan hotend_fan]&lt;br /&gt;
pin: remote:gpio1&lt;br /&gt;
heater: extruder&lt;br /&gt;
heater_temp: 50.0&lt;br /&gt;
&lt;br /&gt;
[tmc2209 extruder]&lt;br /&gt;
uart_pin: remote:gpio7&lt;br /&gt;
uart_address: 0&lt;br /&gt;
run_current: 0.800&lt;br /&gt;
hold_current: 0.500&lt;br /&gt;
sense_resistor: 0.1&lt;br /&gt;
stealthchop_threshold: 0&lt;br /&gt;
&lt;br /&gt;
[extruder]&lt;br /&gt;
step_pin: remote:gpio6&lt;br /&gt;
dir_pin: remote:gpio5&lt;br /&gt;
enable_pin: !remote:gpio10&lt;br /&gt;
heater_pin: remote:gpio0&lt;br /&gt;
sensor_type: ATC Semitec 104GT-2&lt;br /&gt;
sensor_pin: remote:gpio28&lt;br /&gt;
##  Update value below when you perform extruder calibration&lt;br /&gt;
##  If you ask for 100mm of filament, but in reality it is 98mm:&lt;br /&gt;
##  rotation_distance = &amp;lt;previous_rotation_distance&amp;gt; * &amp;lt;actual_extrude_distance&amp;gt; / 100&lt;br /&gt;
##  22.6789511 is a good starting point&lt;br /&gt;
rotation_distance: 22.6789511   #Bondtech 5mm Drive Gears&lt;br /&gt;
gear_ratio:  50:10              #BMG Gear Ratio&lt;br /&gt;
microsteps: 16&lt;br /&gt;
nozzle_diameter: 0.800&lt;br /&gt;
filament_diameter: 1.75&lt;br /&gt;
control: pid&lt;br /&gt;
pid_Kp=28.278&lt;br /&gt;
pid_Ki=1.611&lt;br /&gt;
pid_Kd=124.070&lt;br /&gt;
min_extrude_temp: 15&lt;br /&gt;
min_temp: -273&lt;br /&gt;
max_temp: 500&lt;br /&gt;
pressure_advance: 0.03&lt;br /&gt;
##  Default is 0.040, leave stock&lt;br /&gt;
pressure_advance_smooth_time: 0.040&lt;br /&gt;
&lt;br /&gt;
[adc_temperature remote_current]&lt;br /&gt;
temperature1: 0&lt;br /&gt;
voltage1: 0&lt;br /&gt;
temperature2: 10&lt;br /&gt;
voltage2: 1.0&lt;br /&gt;
&lt;br /&gt;
[temperature_sensor remote_current]&lt;br /&gt;
adc_voltage: 3.3&lt;br /&gt;
sensor_pin: remote:gpio29&lt;br /&gt;
sensor_type: remote_current&lt;br /&gt;
max_temp: 3.0&lt;br /&gt;
&lt;br /&gt;
[temperature_sensor remote_mcu]&lt;br /&gt;
sensor_type: temperature_mcu&lt;br /&gt;
sensor_mcu: remote&lt;br /&gt;
&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: remote:gpio25&lt;br /&gt;
spi_bus: spi1c&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    125, 125, 20&lt;br /&gt;
    &lt;br /&gt;
[probe]&lt;br /&gt;
pin: remote:gpio4&lt;br /&gt;
x_offset: 0&lt;br /&gt;
y_offset: 25.0&lt;br /&gt;
z_offset: 0&lt;br /&gt;
speed: 10.0&lt;br /&gt;
samples: 3&lt;br /&gt;
samples_result: median&lt;br /&gt;
sample_retract_dist: 3.0&lt;br /&gt;
samples_tolerance: 0.01&lt;br /&gt;
samples_tolerance_retries: 3&lt;br /&gt;
&lt;br /&gt;
[neopixel relit_head]&lt;br /&gt;
pin: remote:gpio20&lt;br /&gt;
chain_count: 4&lt;br /&gt;
initial_RED: 1.0&lt;br /&gt;
initial_GREEN: 1.0&lt;br /&gt;
initial_BLUE: 1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klipper firmware compilation ===&lt;br /&gt;
The unit comes with firmware pre-installed. If you want to upgrade the firmware, these are the steps to reproduce. &lt;br /&gt;
This can be done directly from Recore, or from a regular computer. If the device ID doesn't match, the board is not in DFU mode, and needs to be manually started that way. Use a paperclip or some wire, unplug the USB of the device, short the two round pads on the back of the PCB and plug in the USB. At that point the RP2040 will be in DFU mode, allowing it to be flashed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper&lt;br /&gt;
cp test/configs/rp2040.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make -j&lt;br /&gt;
make flash FLASH_DEVICE=&amp;quot;2e8a:0003&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, the board should be visible as OpenMoko, Inc. rp2040&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Screenshot from 2024-09-04 18-41-48.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Enter boot mode from the command line ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper/scripts&lt;br /&gt;
python3 -c 'import flash_usb as u; u.enter_bootloader(&amp;quot;&amp;lt;DEVICE&amp;gt;&amp;quot;)'&lt;br /&gt;
Entering bootloader on &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;DEVICE&amp;gt; is typically &amp;quot;/dev/ttyACM0&amp;quot; or similar.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Rebuild_v1.0.2&amp;diff=1563</id>
		<title>Rebuild v1.0.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Rebuild_v1.0.2&amp;diff=1563"/>
		<updated>2025-02-09T16:00:41Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rebuild header.png|center]]&lt;br /&gt;
Rebuild is a complete Linux image for [[Recore A8|Recore]] 3D printer controller boards. Rebuild comes with Klipper installed and the choice of either [https://docs.mainsail.xyz/ MainSail], [https://docs.fluidd.xyz/ Fluidd] or [https://octoprint.org/ OctoPrint]. The name Rebuild is a reflection of the [https://www.armbian.com/ Armbian] build system, but adapted for Recore boards. &lt;br /&gt;
&lt;br /&gt;
===Rebuild and Refactor===&lt;br /&gt;
Rebuild and Refactor are very similar from a user standpoint, but the build system is different. Recore A7 and A6 come with some version of Refactor (v3.1.x), while Recore A8 comes with Rebuild (v1.0.x) pre-installed. &lt;br /&gt;
&lt;br /&gt;
Rebuild has now been released as v1.0.2&lt;br /&gt;
&lt;br /&gt;
=Installing Rebuild on Recore=&lt;br /&gt;
Recore has eMMC (embedded MMC), so in order to install sotware on the board, a USB drive must be used. For instructions on making a flasher image, have a look at [[Reflash]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
In order to install Rebuild v1.0.2, you need to use Reflash v1.0.1. There is a blog post explaining this new way to install an image on Recore: https://www.iagent.no/2024/05/08/reflash-a-new-way-to-upgrade-firmware/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Latest images==&lt;br /&gt;
The latest images for Recore are available from github. You can choose to download an image directly from within Reflash, or you can choose to download first and then upload it. Here are the latest images: https://github.com/intelligent-agent/Rebuild/releases&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
[[File:USB-C.png|thumb]]&lt;br /&gt;
[[File:Ethernet.png|thumb]]&lt;br /&gt;
[[File:Blink.png|thumb]]&lt;br /&gt;
[[File:Http.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
It can be a good idea to test the board on the bench before installing it in the printer. Use the USB-C connector or the 24V power plug to power the board and connect the ethernet cable between the board and your local network. &lt;br /&gt;
&lt;br /&gt;
Once power is applied, you should see a white LED light up in the middle of the board. After a few seconds, there should be activity on the eMMC LED, the CPU LED and on the heartbeat LED. &lt;br /&gt;
&lt;br /&gt;
Once the board is powered up, use a computer to access the web interface provided by OctoPrint/MainSail/Fluidd (the UI). &lt;br /&gt;
In order to get access the UI, a network cable must be connected to the board and to a network switch. It is also possible to use a wifi dongle, be please see &amp;quot;Known issues&amp;quot; at the bottom of the page for issues regarding Hotspot/AP.&lt;br /&gt;
If a network cable is used, the board should respond to the address:&lt;br /&gt;
http://recore.local&lt;br /&gt;
If using a wifi dongle, the default wifi network password is 12345678.&lt;br /&gt;
&lt;br /&gt;
For OctoPrint, once the interface is visible, run through the wizard to set up a new printer. &lt;br /&gt;
After the wizard is done, go to the Klipper tab in OctoPrint and edit the Klipper config file. &lt;br /&gt;
This is where the bulk of the work will happen. &lt;br /&gt;
&lt;br /&gt;
On the MainSail or Fluidd image, there should not need to be any configuration necessary. Verify that the web interface comes up and that Klipper is running as expected.&lt;br /&gt;
&lt;br /&gt;
== Klipper configuration ==&lt;br /&gt;
There is a standard klipper configuration file that comes with Refactor/Rebuild. The configuration file is set up &lt;br /&gt;
to work out of the box without anything connected on the pins of the board. The default Klipper config can be used as a starting point for building a custom config file for the printer at hand. &lt;br /&gt;
&lt;br /&gt;
After the Klipper configuration is complete, do a test print to make sure everything is working.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-success&amp;quot;&amp;gt;&lt;br /&gt;
===='''Important'''====&lt;br /&gt;
If you get in a situation where Klipper is unable to start normally, replace the content of the &amp;quot;printer.cfg&amp;quot; file with the default config file that came with Rebuild. The default config file should be available in the &amp;quot;config examples&amp;quot; folder in Fluidd and Mainsail. You might need to do a full reboot of the board after going back to that default config. This is a good way to get back to a known working image. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Config-examples.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wifi on Recore==&lt;br /&gt;
Recore does not have wifi built in, but wifi can be added by using a USB dongle. There is a great dual band wifi dongle that has been tested with Recore and Rebuild and should work out of the box. Wifi can be set up to be either an access point (Hotspot) or to connect to an existing access point (wifi router). If nothing is set, the default will be to create a wifi hotspot called &amp;quot;Recore&amp;quot; with password 12345678.&lt;br /&gt;
&lt;br /&gt;
=== Wifi access point===&lt;br /&gt;
The first time Rebuild boots up, it will set up the wifi as an Access Point (AP). This is done by automatically changing the configuration of NetworkManager. The Wifi AP is called '''Recore''' and the password is '''12345678'''. This is meant as a temporary setup, so the password should be changed as soon as access is available. The default IP address for the AP is '''192.168.50.1'''. Once you have connected to the AP, either with a computer or a phone, it should be possible to gain ssh access. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh debian@192.168.50.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connecting to an external Wifi access point ===&lt;br /&gt;
If you have a Wifi dongle connected, you can connect to a local Wifi access point by using the '''nmtui'''  program. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-success&amp;quot;&amp;gt;&lt;br /&gt;
===='''Using nmtui'''====&lt;br /&gt;
nmtui is a Text UI tool to assist in managing network settings.&lt;br /&gt;
nmtui is mainly navigated using the arrow, space, enter, tab &amp;amp; escape keys.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
# Use SSH or the serial port to log in to the device.&lt;br /&gt;
# Start '''nmtui'''&lt;br /&gt;
# Select Activate connection&lt;br /&gt;
# Select wifi network and enter credentials&lt;br /&gt;
# Exit nmtui and verify connection to the wifi network with '''ip addr''' (If you connect via wifi hotspot, you will be disconnected)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Nmtui.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSH access==&lt;br /&gt;
Most of the configuration for Klipper can be handled via the UI, but sometimes it is necessary to have SSH access to the board. By default, the SSH access is disabled, but it can be enabled in three ways.&lt;br /&gt;
# You can choose &amp;quot;enable SSH on new image&amp;quot; in the Reflash user interface&lt;br /&gt;
# You can start the SSH service from Mainsail/Fluidd&lt;br /&gt;
# You can start the ssh service from the serial port. The ssh service will then be persistent on next boot. &amp;lt;pre&amp;gt;systemctl start ssh&amp;lt;/pre&amp;gt;. &lt;br /&gt;
SSH access is only enabled for user '''debian''' using the password '''temppwd'''.&lt;br /&gt;
The first time you log in, you will be prompted to change the password. After the password has been changed, you will need to log in again. If you do not log in within an hour of enabling SSH, '''the SSH access will be disabled'''. This is for security reasons, it's not good to have an open SSH port with the default password. If the SSH access is disabled, it can be enabled again from the user interface.&lt;br /&gt;
&lt;br /&gt;
==Serial port acccess==&lt;br /&gt;
The USB-C port can be used to get a serial port interface to the board. Once the board is connected and booted, you should be able to see the board show up as a USB device. The serial interface can be used with Minicom on Linux, and PuTTY on Windows. &lt;br /&gt;
&lt;br /&gt;
===Upgrading Debian via apt upgrade===&lt;br /&gt;
The /boot partition of Rebuild is mounted &amp;quot;read only&amp;quot;, so it will have to be remounted as Read Write before running an upgrade. This is handled automatically by apt in this version: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable host mode on the USB-C connector ===&lt;br /&gt;
On Recore A7, the host mode for the USB C connector is activated using a device tree overlay. On A8, this is handled automatically.&lt;br /&gt;
To enable the host mode on Recore A7 write the following on the command line. First SSH into the board. Recore A6 and A5 can not operate in host mode with +5V output. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /boot&lt;br /&gt;
sudo armbian-add-overlay /boot/overlay-user/sun50i-a64-usb-host.dts&lt;br /&gt;
sudo mount -o remount,ro /boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Moonraker and Mainsail==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mainsail.png]]&lt;br /&gt;
&lt;br /&gt;
==Using KlipperScreen==&lt;br /&gt;
KlipperScreen is running on X, so a new config should allow rotating the screen. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /usr/share/X11/xorg.conf.d/90-monitor.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;HDMI-1&amp;quot;&lt;br /&gt;
    Option &amp;quot;Rotate&amp;quot; &amp;quot;left&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, KlipperScreen can be restarted. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart KlipperScreen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it is necessary to rotate the touch panel as well, here is a useful section that can be added to the bottom of that same file. Uncomment the rotation that matches your setup.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
            Identifier &amp;quot;Coordinate Transformation Matrix&amp;quot;&lt;br /&gt;
            MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
            MatchDevicePath &amp;quot;/dev/input/event*&amp;quot;&lt;br /&gt;
            MatchDriver &amp;quot;libinput&amp;quot;&lt;br /&gt;
            Option &amp;quot;CalibrationMatrix&amp;quot; &amp;quot;1 0 0 0 1 0 0 0 1&amp;quot;    # 0 degrees&lt;br /&gt;
            #Option &amp;quot;CalibrationMatrix&amp;quot; &amp;quot;0 1 0 -1 0 1 0 0 1&amp;quot;  # 90 degrees&lt;br /&gt;
            #Option &amp;quot;CalibrationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot; # 180 degrees&lt;br /&gt;
            #Option &amp;quot;CalibrationMatrix&amp;quot; &amp;quot;0 -1 1 1 0 0 0 0 1&amp;quot;  # 270 degrees&lt;br /&gt;
&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recompiling and installing binaries==&lt;br /&gt;
===Update u-boot on Recore===&lt;br /&gt;
This is not something the regular user would need to do, but documented here for convenience. &lt;br /&gt;
Place u-boot-sunxi-with-spl.bin in sector 15 (8KB offset)  &lt;br /&gt;
Flash the binary &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk2 bs=1024 seek=8 conv=notrunc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===AR100 firmware===&lt;br /&gt;
The AR100 CPU needs a binary file that is loaded on startup by the systemd file klipper.service&lt;br /&gt;
The AR100 binary file comes pre-compiled in Refactor, so most users should not have to re-compile it. &lt;br /&gt;
For experiments the AR100 binary can be recompiled on Recore (architecture aarch64) or on a host computer (amd64 or similar).  &lt;br /&gt;
&lt;br /&gt;
====Compiling the ar100 binary====&lt;br /&gt;
To configure klipper for AR100 and build the binary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper/&lt;br /&gt;
cp test/configs/ar100.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will produce a bin file located in out/ar100.bin, so it should be moved to /opt/firmware&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv out/ar100.bin /opt/firmware/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the AR100 binary has been updated, klipper.service can be restarted which then loads the new AR100 binary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for ARM64====&lt;br /&gt;
The AR100 needs a cross compilation toolchain. For ARM64, it can be downloaded from feeds.iagent.no:&lt;br /&gt;
&lt;br /&gt;
http://feeds.iagent.no/toolchains/  &lt;br /&gt;
&lt;br /&gt;
The toolchain has been built with  &lt;br /&gt;
&lt;br /&gt;
https://github.com/richfelker/musl-cross-make&lt;br /&gt;
&lt;br /&gt;
GCC version: 11.2.0&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for x86_64====&lt;br /&gt;
The toolchain used during automatic testing and is the same used for the CRUST firmware project: &lt;br /&gt;
&lt;br /&gt;
https://github.com/crust-firmware/crust#building-the-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===STM32 firmware===&lt;br /&gt;
&lt;br /&gt;
The firmware for the stm32f031 mcu that is responsible for ADC &lt;br /&gt;
conversions and PWM for heaters and fans comes pre-installed in the flash of the MCU. &lt;br /&gt;
It can be recreated on the board using the Klipper build system.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper&lt;br /&gt;
cp test/configs/stm32f031.config .config&lt;br /&gt;
make menuconfig&lt;br /&gt;
-&amp;gt; Enable extra low-level configuration options&lt;br /&gt;
-&amp;gt; Processor model (STM32F031)&lt;br /&gt;
-&amp;gt; Bootloader offset (No bootloader)&lt;br /&gt;
-&amp;gt; Clock Reference (Internal clock)&lt;br /&gt;
-&amp;gt; (16) Internal clock trim override&lt;br /&gt;
-&amp;gt; Communication interface (Serial (on USART2 PA15/PA14))&lt;br /&gt;
-&amp;gt; Baud rate for serial port: 250000&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flashing STM32 firmware====&lt;br /&gt;
To flash the STM32 firmware:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp out/klipper.bin /opt/firmware/stm32.bin&lt;br /&gt;
sudo flash-stm32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Klipper===&lt;br /&gt;
Klipper is run as a systemd service. It should not normally need to be restarted from the command line, but during development it can be necessary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The log for Klipper is located in /tmp. It can be viewed as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /tmk/klippy.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Klipper can also be restarted from the OctoPrint interface. On the &amp;quot;Klipper&amp;quot; tab, press &amp;quot;Firmware&amp;quot; to restart the Klipper firmware. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Klipper-firmware-press.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Toggle===&lt;br /&gt;
Toggle is started automatically by the systemd service toggle.service. A user is created for Toggle on first boot, but the credentials are not set until a user is created in OctoPrint. Once the wizard has been completed, the Toggle user is active, but the credentials will not be valid until OctoPrint is restarted. Therefore, if Toggle is needed, restart OctoPrint after the wizard is complete.&lt;br /&gt;
&lt;br /&gt;
Toggle is running on Weston, so a new config should allow rotating the screen. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /etc/xdg/weston/weston.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit the section about rotation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[output]&lt;br /&gt;
name=HDMI-A-1&lt;br /&gt;
transform=rotate-90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, Weston can be restarted. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart weston&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the Ubuntu documentation for valid rotations: [https://manpages.ubuntu.com/manpages/jammy/man5/weston.ini.5.html weston.ini]&lt;br /&gt;
== Recore booting ==&lt;br /&gt;
There are several stages to booting Recore, and depending on which media is installed, the boot process will &lt;br /&gt;
try and boot either from eMMC, USB host or USB device (FEL).&lt;br /&gt;
&lt;br /&gt;
The board can be booted by either pressing the &amp;quot;BOOT&amp;quot; button for 2 seconds or by applying power to either the 24V connector or the USB C connector. To shut down the board, either use the &amp;quot;shutdown&amp;quot; button from the UI or press the &amp;quot;BOOT&amp;quot; button once. It's not ideal to shut off the board by removing power directly as this can cause a corrupted file system. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;From eMMC&amp;quot;&amp;gt;&lt;br /&gt;
===Booting Recore from eMMC (the normal way)===&lt;br /&gt;
# Turn on power&lt;br /&gt;
# The BROM will load u-boot SPL from eMMC&lt;br /&gt;
# The u-boot SPL will load u-boot&lt;br /&gt;
# u-boot will load Linux&lt;br /&gt;
# Linux will load the rootfs from eMMC.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;From USB&amp;quot;&amp;gt;&lt;br /&gt;
===Loading u-boot from eMMC but load kernel and rootfs from USB===&lt;br /&gt;
Starting with Rebuild v1.0.0, u-boot will do a scan for a USB mass storage device and if a working version of Reflash or Rebuild or Refactor is found, it will boot to that image.&lt;br /&gt;
# Download Refactor/Rebuild/Reflash and flash it to a USB drive.&lt;br /&gt;
# Insert the USB drive in the board. &lt;br /&gt;
# Boot the board normally (Use the Boot button/apply power)&lt;br /&gt;
The board should now be have the kernel/rootfs from the USB drive.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;From FEL&amp;quot;&amp;gt;&lt;br /&gt;
===Boot Recore from a USB stick using the FEL button===&lt;br /&gt;
If u-boot should be loaded from a host computer and kernel and rootfs is loaded from a USB drive:&lt;br /&gt;
# Flash the [[Reflash]] Linux distro to a USB drive. &lt;br /&gt;
# Insert the USB drive in the Recore board in one of the two host connectors close to the HDMI.&lt;br /&gt;
# Hold down the FEL button while applying power to the board via the USB-C connector.&lt;br /&gt;
# Download the Recore repository https://github.com/intelligent-agent/Recore&lt;br /&gt;
# Install the sunxi-tools program&lt;br /&gt;
# Run the fel command ('''make fel''') from the host computer. All the necessary binarys are in the Recore repository:&lt;br /&gt;
You can read more about the steps needed to boot aboard in FEL mode on the Sunxi wiki: https://linux-sunxi.org/FEL&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Depending on what linux platform you're running from, sunxi-tools will require the following dependencies to compile properly:&lt;br /&gt;
* libftd-dev&lt;br /&gt;
* libusbx-dev&lt;br /&gt;
* libudev-dev&lt;br /&gt;
(These are Debian/ubuntu names. For Fedora, change -dev to -devel)&lt;br /&gt;
&lt;br /&gt;
This should upload u-boot from the host computer to the board via the USB cable. u-boot will then boot from the connected USB drive. &lt;br /&gt;
Please note that in some instances, the USB drive is not detected as a mass storage device without also having the VIN power connector inserted. See more in [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|in the &amp;quot;known errors&amp;quot; section of Recore A6]]&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running OctoPrint===&lt;br /&gt;
OctoPrint is stated on boot. If there is a need to restart the daemon, use this command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart octoprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues==&lt;br /&gt;
===Having both Ethernet and Wi-Fi creates problems with mDNS===&lt;br /&gt;
When having both ethernet and Wi-Fi connected there can be a problem with hostname resolution. &lt;br /&gt;
The workaround is to either remove Wi-Fi or ethernet.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Recore_A8&amp;diff=1549</id>
		<title>Recore A8</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Recore_A8&amp;diff=1549"/>
		<updated>2024-12-19T09:01:33Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Klipper Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint, MainSail or Fluidd. The main features are: &lt;br /&gt;
* Allwinner A64 SoC, quad core CPU running at 1 GHz. &lt;br /&gt;
* 1 GB of DDR3 RAM&lt;br /&gt;
* 8 GB of on board eMMC &lt;br /&gt;
* Gigabit Ethernet&lt;br /&gt;
* 6 TMC2209, 2 A stepper motor drivers&lt;br /&gt;
* 3 heater outputs + high power heated bed&lt;br /&gt;
* 4 USB High Speed ports &lt;br /&gt;
* 4 thermistor/thermocouple inputs (software selectable)&lt;br /&gt;
* Comes with Debian Linux with Klipper and OctoPrint, MainSail or Fluidd installed&lt;br /&gt;
&lt;br /&gt;
This document is for Recore Revision A8. For previous hardware revisions, please see:  &lt;br /&gt;
* [[Recore_A7]]&lt;br /&gt;
* [[Recore_A6]]&lt;br /&gt;
* [[Recore_A5]]&lt;br /&gt;
* [[Recore_A4]]&lt;br /&gt;
* [[Recore_A3]]  &lt;br /&gt;
* [[Recore_A2]]&lt;br /&gt;
&lt;br /&gt;
==Availability==&lt;br /&gt;
Recore A8 can be purchased from the Intelligent Agent web shop [https://www.iagent.no/product/recore/ https://www.iagent.no/product/recore/]&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Recore is &amp;quot;open schematic&amp;quot;, it is available here: [https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A8.pdf https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A8.pdf]&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
A STEP file of the PCB with components is available here: [https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A8.step https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A8.step]&lt;br /&gt;
==CE and FCC==&lt;br /&gt;
Recore has been certified according to 2014/30/EU. The certificate of compliance can be downloaded here: [http://feeds.iagent.no/doc/CE-Recore.pdf CE-Recore.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
The FCC declaration of conformity can be downloaded here: [http://feeds.iagent.no/doc/FCC-Recore.pdf FCC-Recore.pdf]&lt;br /&gt;
&lt;br /&gt;
=Pinout=&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore A8 pinout.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==A64==&lt;br /&gt;
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) clocked at 300 MHz that handles the real time aspect for the 3D-printer. In the following table the pins used for End-stops and stepper control are described. &lt;br /&gt;
The &amp;quot;bank and pin&amp;quot; can be used to specify the pin numbers in klipper. &lt;br /&gt;
The &amp;quot;Number&amp;quot; column is useful for testing things on the command line in conjunction with gpiod.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !! Number&lt;br /&gt;
|-&lt;br /&gt;
| STEP 0 || PL4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 4 || END STOP 0 || PH4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;|228 || OC-ALERT || PF6 || 166&lt;br /&gt;
|-&lt;br /&gt;
| STEP 1 || PL5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 5 || END STOP 1 || PH5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 229 || OC-RESET || PF4 || 164&lt;br /&gt;
|-&lt;br /&gt;
| STEP 2 || PL6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 6 || END STOP 2 || PH6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 230 || EN-HP || PF5 || 165&lt;br /&gt;
|-&lt;br /&gt;
| STEP 3 || PL7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 7 || END STOP 3 || PH7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 231 || UC-INT-1 || PG3 || 195&lt;br /&gt;
|-&lt;br /&gt;
| STEP 4 || PL8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 8 || END STOP 4 || PH8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 232 || UC-NRST || PG4 || 196&lt;br /&gt;
|-&lt;br /&gt;
| STEP 5 || PL9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || END STOP 5 || PH9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 233 || UC-BOOT || PG5 || 197&lt;br /&gt;
|-&lt;br /&gt;
| STEP 6 || PL10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 10 || GAIN-ENABLE-T0 || PD4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 100 || ES-EN-12V || PF0 || 160&lt;br /&gt;
|-&lt;br /&gt;
| STEP 7 || PL11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 11 || GAIN-ENABLE-T1 || PH11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 235 || EN-THERMISTORS || PF1 || 161&lt;br /&gt;
|-&lt;br /&gt;
| DIR 0 || PE8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 136 || GAIN ENABLE T2 || PE17 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 145 || EN-ENDSTOPS || PF2 || 162&lt;br /&gt;
|-&lt;br /&gt;
| DIR 1 || PE9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 137 || GAIN ENABLE T3 || PB2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 34 || USR-BTN || PB3 || 35&lt;br /&gt;
|-&lt;br /&gt;
| DIR 2 || PE10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 138 || PU-ENABLE-T0 || PG10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 202 || USR-PIN || PF3 || 163&lt;br /&gt;
|-&lt;br /&gt;
| DIR 3 || PE11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 139 || PU-ENABLE-T1 || PG11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 203 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 4 || PE12 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 140 || PU ENABLE T2 || PG12 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 204 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 5 || PE13 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 141 || PU ENABLE T3 || PG13 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 205 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 6 || PE14 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 142 || OFFSET-T0 || PG0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 192 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 7 || PE15 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 143 || OFFSET-T1 || PG1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 193 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 0 || PE0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 128 || OFFSET-T2 || PG3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 194 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 1 || PE1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 129 || OFFSET-T3 || PG8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 200 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 2 || PE2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 130 || STEPPER UART 0-3 || PE16 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 144 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 3 || PE3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 131 || STEPPER UART 4-5 || PD24 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 120 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 4 || PE4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 132 || STEPPER UART 6 || PD2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 98 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 5 || PE5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 133 || STEPPER UART 7 || PD3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 99 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 6 || PD0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 96 || STEPPERS ENABLE || PL12 ||style=&amp;quot;border-right:solid 2px;&amp;quot;|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 7 || PD1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 97 ||  ||  ||style=&amp;quot;border-right:solid 2px;&amp;quot;|  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==STM32F031==&lt;br /&gt;
The STM32 is a Cortex M0 powered micro controller handling analog inputs and PWM outputs. It does not control any hard real time aspects of the print, that is handled by the AR100 core realized as a separate core in the A64 SoC. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !! Number&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E0 || PA8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 18 || THERMISTOR 0 || PA0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 6 || ES1-DIR || PB3 || 26&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E1 || PA9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 19 || THERMISTOR 1 || PA1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 7 || ES2-DIR || PB6 || 29&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E2 || PA10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 20 || THERMISTOR 2 || PA2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 8 || EXT 1 || PB7 || 30&lt;br /&gt;
|-&lt;br /&gt;
| HEATER BED || PA11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 21 || THERMISTOR 3 || PA3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || EXT 2 || PB8 || 32&lt;br /&gt;
|-&lt;br /&gt;
| FAN 0 || PF0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 2 || BOARD VOLTAGE || PA4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 10 || EXT 3 || PA13 || 23&lt;br /&gt;
|-&lt;br /&gt;
| FAN 1 || PB1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 15 || BOARD CURRENT || PA5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 11 || EXT 4 || PB2 || 16&lt;br /&gt;
|-&lt;br /&gt;
| FAN 3 || PB4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 27 || BOARD TEMPERATURE || PA6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 12 || USER LED || PA12 || 22&lt;br /&gt;
|-&lt;br /&gt;
| FAN 2 || PB5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 28 || COLD JUNCTION || PA7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 13 || FAN_CURRENT || PB0 || 14&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==DBG header==&lt;br /&gt;
The debug header has UART 0 layed out on some of the pins and is used for interacting with u-boot and getting early debug messages from the Linux kernel. It also has a the option to connect a &amp;quot;boot&amp;quot; button so the board can be safely started and shut down from the 3D-printers front panel. The USR pin can be used to light up a an LED or some other custom function. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|BOOT&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|USR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MCU header==&lt;br /&gt;
The MCU header is used for connecting external peripherals to the STM32F031 micro controller on the board. There are 4 pins in total available to use. In addition, there is a ground pin and a 3.3 V pin available. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|PB7&lt;br /&gt;
|I2C1_SDA&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|PB8&lt;br /&gt;
|I2C1_SCL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|0.7-3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|PA13&lt;br /&gt;
|EXTI 13&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|PB2&lt;br /&gt;
|EXTI 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SPI on S6 and S7 headers==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|S6-3&lt;br /&gt;
|PD0&lt;br /&gt;
|SPI1_CS&lt;br /&gt;
|-&lt;br /&gt;
|S6-5&lt;br /&gt;
|PD1&lt;br /&gt;
|SPI1_CLK&lt;br /&gt;
|-&lt;br /&gt;
|S7-3&lt;br /&gt;
|PD2&lt;br /&gt;
|SPI1_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|S7-5&lt;br /&gt;
|PD3&lt;br /&gt;
|SPI1_MISO&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LEDs===&lt;br /&gt;
There are 15 white LEDs on the board. Here is what they mean&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Location&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|By PMIC&lt;br /&gt;
|Board powered&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|By heater BED &lt;br /&gt;
|BED output on&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|By fan 0&lt;br /&gt;
|Fan 0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|By fan 1&lt;br /&gt;
|Fan 1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D6&lt;br /&gt;
|By heater H2&lt;br /&gt;
|Heater H2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D7&lt;br /&gt;
|By fan 2&lt;br /&gt;
|Fan 2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D8&lt;br /&gt;
|By heater H0&lt;br /&gt;
|Heater H0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D9&lt;br /&gt;
|By fan 3&lt;br /&gt;
|Fan 3 is on&lt;br /&gt;
|-&lt;br /&gt;
|D10&lt;br /&gt;
|By heater H1&lt;br /&gt;
|Heater H1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D12&lt;br /&gt;
|By input connector&lt;br /&gt;
|High voltage domain is on&lt;br /&gt;
|-&lt;br /&gt;
|D15&lt;br /&gt;
|By eMMC chip&lt;br /&gt;
|eMMC activity&lt;br /&gt;
|-&lt;br /&gt;
|D17&lt;br /&gt;
|By USB hub chip&lt;br /&gt;
|USB activitiy&lt;br /&gt;
|-&lt;br /&gt;
|D18&lt;br /&gt;
|By the USB C connector&lt;br /&gt;
|Linux Heartbeat&lt;br /&gt;
|-&lt;br /&gt;
|D19&lt;br /&gt;
|By the A64 SoC&lt;br /&gt;
|CPU activity&lt;br /&gt;
|-&lt;br /&gt;
|D20&lt;br /&gt;
|By the STM32&lt;br /&gt;
|Klipper running on STM32&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are 3 push buttons on the board. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|FEL&lt;br /&gt;
|Enter FEL-mode of the A64&lt;br /&gt;
|-&lt;br /&gt;
|BOOT&lt;br /&gt;
|Boots or shuts down the board&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|Hard reset of the CPU&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Current limits==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name&lt;br /&gt;
!Limit&lt;br /&gt;
|-&lt;br /&gt;
|5V-ES (endstops)&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|USB host 3 and 4 each (5VP)&lt;br /&gt;
|1.1 A&lt;br /&gt;
|-&lt;br /&gt;
|USB host 1 and 2 each (VSP)&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|Thermistors&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|MCU and DBG connector&lt;br /&gt;
|0.5 A&lt;br /&gt;
|-&lt;br /&gt;
|Fan connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|Heater connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Wiring=&lt;br /&gt;
Below is a wiring diagram meant to aid in connecting motors, fans, extruders and hot ends to the control board. On the board, there is a small + sign next to output connectors where polarity is important. If passive heating elements are used, polarity is not important, but if those outputs are to be used with SSRs or relays, polarity must be observed. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore-wire-diagram-3.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Network connection==&lt;br /&gt;
Recore is designed to be controlled through a browser on a computer, so the board must be connected to the local LAN or wifi network. Connect an ethernet cable between the board and a switch. The ping utility can be used to ensure that the board is discovered on the network.&lt;br /&gt;
&lt;br /&gt;
===LAN setup===&lt;br /&gt;
Recore with Refactor is running avahi and should announce itself on the network once a connection has been established. On a Linux based host computer, it is possible to search for a booted device using the following command: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ping recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the device is present, an SSH connection can be established:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Furthermore, a web interface running OctoPrint can be found using a browser:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
==Wifi setup==&lt;br /&gt;
Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the uSB dongle has been connected, and the board has been booted, access to the terminal command line can be given through a host computer. The board should appear as a TTY ACM device. On a Linux based host computer, the terminal program `screen` can be used to get access. From the host computer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
screen /dev/ttyACM0 115200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the host computer is running Windows, [https://www.putty.org/ Putty] can be used to get access. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established, the wifi network can be set up using the command nmtui. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nmtui&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Follow the instructions on screen to edit and activate the wifi connection. &lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mating Connectors==&lt;br /&gt;
The power connectors on the board are available either in the web shop as part of a [https://www.iagent.no/product/recore-connector-pack-a8/ connector pack] or directly from Digi-key etc.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Connectors A8.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Four pin male: TBP01P1-508-04BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-04BE/10238369 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
Two pin male: TBP01P1-508-02BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-02BE/10238367 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
Two pin female housing: PHR-2-BK&lt;br /&gt;
&lt;br /&gt;
Three pin female housing: PHR-3-BK&lt;br /&gt;
&lt;br /&gt;
Four pin female housing: PHR-4-BK&lt;br /&gt;
&lt;br /&gt;
=Klipper Configuration=&lt;br /&gt;
There are no jumpers on Recore and no hard fuses. Everything is software configurable and resettable from software. This gives great power and flexibility without requiring physical access to the board once it has been installed. But with great power comes great responsibility. It is possible to break things if care is not taken during setup. There is one setting in particular that is worth mentioning: ES0 can have either +5V or +12V on the power pin. This is in order to allow a standard industrial inductive sensor to be used on that end stop. If a 5V only peripheral is connected, that could damage the connected peripheral. &lt;br /&gt;
&lt;br /&gt;
The default config file for Recore A8 can be found in the repository: [https://github.com/intelligent-agent/Rebuild/blob/main/userpatches/overlay/klipper/generic-recore-a8.cfg generic-recore-a8.cfg]&lt;br /&gt;
&lt;br /&gt;
===TMC2209===&lt;br /&gt;
The 6 stepper drivers on Recore are of type TMC2209 from Trinamic. Each stepper has a configuration interface with a bidirectional UART port that is connected to a pin on the A64. The GPIO bit-banging functionality of Klipper is used to communicate with the stepper drivers. &lt;br /&gt;
&lt;br /&gt;
Here is a table with pins and addresses for the steppers&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Stepper driver config&lt;br /&gt;
|-&lt;br /&gt;
|Name&lt;br /&gt;
|Pins&lt;br /&gt;
|Address&lt;br /&gt;
|-&lt;br /&gt;
|S0&lt;br /&gt;
|PE16&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S1&lt;br /&gt;
|PE16&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S2&lt;br /&gt;
|PE16&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S3&lt;br /&gt;
|PE16&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|S4&lt;br /&gt;
|PD24&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S5&lt;br /&gt;
|PD24&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S6&lt;br /&gt;
|PD2&lt;br /&gt;
|0-3&lt;br /&gt;
|-&lt;br /&gt;
|S7&lt;br /&gt;
|PD3&lt;br /&gt;
|0-3&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External stepper drivers ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Ext-driver.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. &lt;br /&gt;
These can be connected using the headers S6 and S7.&lt;br /&gt;
&lt;br /&gt;
See also [[Restep_A1]] for a convenient alternative external stepper driver.&lt;br /&gt;
&lt;br /&gt;
==Temperature inputs==&lt;br /&gt;
4 different temperature devices can be connected to the 4 analog inputs on Recore. Thermistor, Thermocouple, PT100 with INA826 and PT1000 without the use of a pre-amplifier.&lt;br /&gt;
===Thermistor===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermistor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the op-amp gain is set to 1.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermocouple.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure the pull-up is disabled and the op-amp gain is set to 100.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[recore]&lt;br /&gt;
...&lt;br /&gt;
gain_t0: 100&lt;br /&gt;
pullup_t0: 0&lt;br /&gt;
offset_t0: 1&lt;br /&gt;
&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: Type K&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PT100 with INA826===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT100.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to use a PT100 sensor, an external amplifier board must be used. There is an example configuration for Klipper that &lt;br /&gt;
uses this. The ADC reference voltage is 5.0 by default, but for Recore it is 3.3 V. Here is an example:  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT100 INA826&lt;br /&gt;
adc_voltage: 3.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pull-up must also be disabled.&lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT1000.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the gain is set to 1. In the latest version, the sensor must be prefixed with RECORE. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT1000&lt;br /&gt;
pullup_resistor: 4750&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===End stops===&lt;br /&gt;
There are 6 end stop inputs on Recore, some of them server a dual purpose.&lt;br /&gt;
&lt;br /&gt;
=Connecting other sensors=&lt;br /&gt;
The board has been designed to work with a range of 3rd party sensors for automating the print.&lt;br /&gt;
==BLtouch==&lt;br /&gt;
There are two versions of the BLtouch, the difference is the color of one of the GND wires. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Antclabs BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The Creality version has a blue GND wire. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Creality BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
There have been some cases of bad quality control for the Creality BLTouches, where the pinout on the sensor side have not matched the color coding in the photos/documentation. It might be good to make sure the color codes match up. For the Creality it should be, from left to right: &lt;br /&gt;
Blue, red, yellow, black, white. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When connected per wiring diagram above, setting up BLtouch can be done by adding the following section to printer.cfg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bltouch]&lt;br /&gt;
sensor_pin: ar100:PH6&lt;br /&gt;
control_pin: !PB3&lt;br /&gt;
speed:15&lt;br /&gt;
samples:1&lt;br /&gt;
pin_move_time: 0.675&lt;br /&gt;
sample_retract_dist: 10&lt;br /&gt;
probe_with_touch_mode: true&lt;br /&gt;
stow_on_each_sample: false&lt;br /&gt;
x_offset:29.2&lt;br /&gt;
y_offset:-34&lt;br /&gt;
z_offset:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inductive Sensor ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inductive sensor wiring 2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin. Inductive sensors often come with an industry standard voltage input of 6-36 V. For this reason there is a 12 V LDO (Low drop-out) voltage regulator integrated on the board. This voltage regulator can be output on the V+ pin of the connector marked ES0. If the Input to the board is 12 V, the LDO will supply a lower voltage, around 10.6 or so.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
All the end-stops have a permanent 10 K pull-up resistor between the signal pin (pin 2) and the +5V/+12V (pin3). This will work with an NPN-type inductive sensor. If you have a PNP-type inductive sensor, you need to add a pull-down resistor of a lower value, for instance 1 K. The pull-down resistor goes between the signal pin (pin 2) and ground (pin 1). &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is a minimal probe config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[probe]&lt;br /&gt;
pin: ar100:PH4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ADXL345==&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a [https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html Pi Pico] or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
See also [[Remove_A1]], a convenient finished accelerometer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A popular accelerometer sensor for doing input shaping with Klipper is the ADXL345. This can be connected to the connectors S6/S7. There is no hardware SPI interface available, but a software implementation in Klipper exists. &lt;br /&gt;
Note: Only experimental support has been tested for this. &lt;br /&gt;
https://learn.adafruit.com/adxl345-digital-accelerometer&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: ar100:PL11&lt;br /&gt;
spi_software_sclk_pin: ar100:PL10&lt;br /&gt;
spi_software_mosi_pin: ar100:PE15&lt;br /&gt;
spi_software_miso_pin: ar100:PE14&lt;br /&gt;
rate: 400&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a Raspberry Pi Pico:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: pico:gpio17&lt;br /&gt;
spi_bus: spi0c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Neopixels ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Neopixel wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use endstop ES1 (PH5) or ES2 (PH6).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neopixel my_neopixel_1]&lt;br /&gt;
pin: ar100:PH5&lt;br /&gt;
&lt;br /&gt;
[neopixel my_neopixel_2]&lt;br /&gt;
pin: ar100:PH6&lt;br /&gt;
&lt;br /&gt;
[static_digital_output es1_direction]&lt;br /&gt;
pins: !PB3&lt;br /&gt;
&lt;br /&gt;
[static_digital_output es2_direction]&lt;br /&gt;
pins: !PB6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also [[Relit_A0]]&lt;br /&gt;
&lt;br /&gt;
==RC Servo==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:RC-servo.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Endstop 1 and 2 can be used as PWM outputs with 5V levels. Rev A6 is the first board with support for this. &lt;br /&gt;
More testing and configuration documentation is needed.&lt;br /&gt;
&lt;br /&gt;
==Filament runout sensor==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Filament-runout-sensor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Any of the 6 end stops can be used for connecting a filament runout sensor&lt;br /&gt;
&lt;br /&gt;
=Software for Recore=&lt;br /&gt;
Recore comes with the Linux distro Rebuild (Armbian) pre-installed on the eMMC. &lt;br /&gt;
For more instructions about software for Recore, see the Rebuild wiki page: &lt;br /&gt;
[[ Rebuild ]]&lt;br /&gt;
&lt;br /&gt;
=== AR100 ===&lt;br /&gt;
Please see: [[AR100]]&lt;br /&gt;
&lt;br /&gt;
=== Manual control and testing ===&lt;br /&gt;
https://wiki.iagent.no/wiki/Manual_control_and_testing&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
===Start-up time===&lt;br /&gt;
With a maximum clock for MMC2 of 200 MHz, here is the start-up time: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# systemd-analyze&lt;br /&gt;
Startup finished in 3.011s (kernel) + 12.292s (userspace) = 15.303s &lt;br /&gt;
graphical.target reached after 11.934s in userspace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===eMMC read and write speed===&lt;br /&gt;
eMMC write speed: 65.2 MB/s&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/dev/random of=/dev/mmcblk2 bs=1M count=1000                                                       &lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 16.0853 s, 65.2 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eMMC read speed: 111 MB/s&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/dev/mmcblk2 of=/dev/null bs=1M count=1000&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.42715 s, 111 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USB read and write speed===&lt;br /&gt;
Software: Reflash v1.0.1&amp;lt;br&amp;gt;&lt;br /&gt;
Disk: WD Elements SE&amp;lt;br&amp;gt;&lt;br /&gt;
USB write speed:  31.0 MB/s&amp;lt;br&amp;gt;&lt;br /&gt;
USB read speed: 33.0 MB/s&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/dev/zero of=/mnt/usb/random.bin bs=1M count=1000 conv=fsync&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 33.8744 s, 31.0 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/mnt/usb/random.bin of=/dev/null&lt;br /&gt;
2048000+0 records in&lt;br /&gt;
2048000+0 records out&lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 31.7393 s, 33.0 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measured voltages==&lt;br /&gt;
The final stages of Recore manufacturing consists of testing, calibration and flashing of firmware. &lt;br /&gt;
The calibration stage measures a number of voltages on the board and classifies the input stages gain and offset. &lt;br /&gt;
&lt;br /&gt;
====5V Buck converter ripple and noise ====&lt;br /&gt;
The 5V step down/Buck converter is a AOZ2153EQI-30. It can provide 8A and has an input voltage range of 12-28V. &lt;br /&gt;
&lt;br /&gt;
Below is a screenshot of the ripple and noise across the  the 5V rail with a normal kernel running and pulling 4 A from the USB and with 6 Neopixels connected. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:A8 5V ripple.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input stage===&lt;br /&gt;
When drawing a constant current of 20 A from the bed connector with and without any forced convection. The temperature measured was with the on board thermistor. Using a thermal camera, the temperature displayed matches well with the temperature reported by the camera. The maximum board temperature of 100 degrees C is reached after about 10 minutes with no forced convection. &lt;br /&gt;
Ambient temperature in the room: 20.1 degrees C.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Input stage temperature no fan.png|A7 Input stage temperature no fan]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With forced convection (a 92 mm Noctua fan) and a current load of 29 A, the maximum temperature reached after 10 minutes was 87.7 degrees C as measured by the on board thermistor. The thermal camera showed a higher temperature of 98 degrees. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Input stage temperature with fan crop.png|Input stage temperature with fan]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maximum input voltage ====&lt;br /&gt;
Using 1.5 m test leads and a 26 V bench top PSU (Agilent U8002A) a board has been tested for over voltage issues. This was a problem with Rev A6. No issues were found during testing. &lt;br /&gt;
&lt;br /&gt;
====Inrush current====&lt;br /&gt;
During turn on of the high power stage, there will be an inrush current to charge up the bank of capacitors present on the board. &lt;br /&gt;
If no loads are turned on, the inrush current reaches 28 A at peak, depending on PSU and cables. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A7 when the input is enabled. The PSU in use was a PeakTech 6160 (30V/30A) benchtop switchmode PSU. The cables used were Pomona B-24-0 and B-24-2, 24&amp;quot; 18 AWG banana plug test leads.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:A8 inrush current.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Over current protection====&lt;br /&gt;
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. &lt;br /&gt;
# The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. &lt;br /&gt;
# The current limit set in Klipper monitors the continuous current draw. This is now set at 20 A, but can go up to 30 A and still be within the limits of the connectors and input stage mosfets. &lt;br /&gt;
# The over temperature protection monitors the temperature in the input stage and cuts the power if the temperature goes over 110 degrees. The board should not be kept at this temperature for a prolonged period, but during heated bed heat-up, it can be elevated compared to the rest of the print.&lt;br /&gt;
&lt;br /&gt;
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:A7 over current input turns on.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a plot of what the current on the input looks like if there is an over current condition after the input has been turned on. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:A7 over current output turns on.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ADC offset and gain measurements===&lt;br /&gt;
To measure the ADC offset error, measure the voltage on the uC input pin and record when the &lt;br /&gt;
transition from 0 to 1 occurs. It should occur at 0.5 LSB = 3.3/4096/2 = 0.4028 mV. &lt;br /&gt;
Offset: 55.35 mV - 0.4028 mV = 54.95 mV&lt;br /&gt;
&lt;br /&gt;
==Temperature calibration==&lt;br /&gt;
A set of experiments have been carried out to calibrate the different sensors using a dry-well calibrator. &lt;br /&gt;
The reference probe was a Sensing Devices SDL385 PRT. &lt;br /&gt;
The levels of calibration was: room temperature, 50, 100, 150, and 200 degrees C.&lt;br /&gt;
&lt;br /&gt;
===Thermistor===&lt;br /&gt;
The thermistor in use was a standard EPCOS 100K B57560G104F. This thermistor has a resistance tolerance of 2 %. The value of the pull-up resistor as measured during calibration was 4740.17501. This value seemed to work well at all levels of calibration, although a little on the high side compared to the reference. &lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
The PT1000 in use was a Heraeus 31500989 [https://www.heraeus.com/media/media/hne/datasheets/sensor_assemblies_1/Heraeus_W-EYK_Sensor_E.pdf] works well. The tolerance class given in the datasheet is &amp;quot;F 0.10 / Class 1/3 B&amp;quot;. There are two different tolerances here: F0.10 and one third of Class B. The accuracy looks good at all temperatures, perhaps a bit on the high side if using the calibrated value for the pull-up. During the testing, 10 ohm was subtracted from the calibrated value.&lt;br /&gt;
&lt;br /&gt;
===PT100===&lt;br /&gt;
The PT100 used in the calibration was the E3D PT100 with the INA826 amplifier board. There is no datasheet available for the PT100 sensor and no mention of what tolerance there is on the reference resistors used. Furthermore Klipper expects the reference voltage to be 5V exactly, and there is no way to supply a measured value. Measurements on Recore has shown that the value is often a bit lower due to the PMIC for the 5V output on the &amp;quot;input&amp;quot; ports. 4.979 V has been measured and is likely an expected value.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
Using the calibration values directly will give a slight offset to the thermocouple measurements. &lt;br /&gt;
The gain and ADC voltage can be used as measured during calibration. It should be in the region of 101 for gain and 3.307 for ADC voltage. As for the offset, that can be increased slightly to compensate for the cold junction temperature difference. For instance, the measured offset for the test board was 0.0032960, but a value of 0.00340 fit the data points well. The measurements were done on T2, so it it possible that the distance from the cold junction caused the offset. The cold junction thermistor is located between T0 and T1.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
====Where can I ask for help?====&lt;br /&gt;
:You can join the Discord: https://discord.gg/bCnp9H5SB5&lt;br /&gt;
====What comes in the box with the Recore? Specifically, terminal connectors for power, etc?====&lt;br /&gt;
:It's only the board, no cables or connectors. There is a bag of connectors available to purchase in the web shop.&lt;br /&gt;
====Do I need access to those 4 buttons on the board?====&lt;br /&gt;
:It is not necessary to have access to the 4 buttons for normal use.&lt;br /&gt;
&lt;br /&gt;
====What's the maximum current draw for heat bed?====&lt;br /&gt;
:This has been tested up to 30 A with good cooling using a fan and a heat sink.&lt;br /&gt;
&lt;br /&gt;
====I have a gadget that I want to connect with SPI. Is that possible?====&lt;br /&gt;
:On Recore A8, there is support for an SPI peripheral. The pins are broken out on header S6/S7.&lt;br /&gt;
&lt;br /&gt;
====What exactly is the role of the AR100 device?====&lt;br /&gt;
:The AR100 handles the fast real-time aspects, mainly the stepper motors and end stops.&lt;br /&gt;
&lt;br /&gt;
====What voltage fans are supported?====&lt;br /&gt;
:The same voltage as the input voltage, either 12 V or 24 V. You can experiment with PWM for running lower voltage fans on 24 V input.&lt;br /&gt;
====Where is the board layout file?====&lt;br /&gt;
:The Layout file will not be available. It is an &amp;quot;open schematic&amp;quot; board, not open source hardware&lt;br /&gt;
====Where are you shipping from?====&lt;br /&gt;
:Boards are shipping from Norway. Eventually shipping will be from a warehouse in the US&lt;br /&gt;
&lt;br /&gt;
= Known hardware issues for rev A8=&lt;br /&gt;
* ENN for steppers does not have a pull-up resistor, so the steppers are enabled once power is applied. (This can be fixed with a software workaround.)&lt;br /&gt;
* Using the boot button to start the board from a shut down state does not always start the board. A workaround is to either shut it off again, press the RST button or remove power and then re-apply power. &lt;br /&gt;
* The USB drivers in u-boot seem to have some trouble with certain boards and emit the error message&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EHCI timed out on TD - token=0xXXXXXXXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Applying the VIN voltage after the board has been booted via USB can cause an instant shutdown. &lt;br /&gt;
&lt;br /&gt;
==List of changes from A7 to A8==&lt;br /&gt;
* Use JST 2 mm connectors. &lt;br /&gt;
* Add enable pin on stepper motors  &lt;br /&gt;
* 8 layer PCB  &lt;br /&gt;
* Higher current 5V step down (AOZ2153EQI-30 8A)  &lt;br /&gt;
* Reduce clearance from 0.15 to 0.1 on ground layers  &lt;br /&gt;
* Recalculated transmission line impedances for lower Radiated emission  &lt;br /&gt;
* Add more decoupling capacitors on CPUX node  &lt;br /&gt;
* Add USB-button  &lt;br /&gt;
* USB1 and USB2 can now draw much more current&lt;br /&gt;
* Add Mipi VCC  &lt;br /&gt;
* Terminating resistor for CK on DDR3  &lt;br /&gt;
* Move AXP803 to make room for larger HDMI trace distances.  &lt;br /&gt;
* Faster level shifter for using Neopixels. &lt;br /&gt;
* Fatter VREF traces on DDR3&lt;br /&gt;
* Fix FUSB pin usage.&lt;br /&gt;
* Less inrush current&lt;br /&gt;
* Lower minimum current limit to 17.5 A (max: 82.5)&lt;br /&gt;
* SBU pins connected on USB-C connector&lt;br /&gt;
&lt;br /&gt;
= Migrating Klipper config from A7 to A8 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|[tmc2209 stepper_x]&lt;br /&gt;
|-&lt;br /&gt;
|Before&lt;br /&gt;
|After&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|enable_pin: !ar100:PL12&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Mainline_Klipper&amp;diff=1374</id>
		<title>Mainline Klipper</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Mainline_Klipper&amp;diff=1374"/>
		<updated>2024-05-27T06:45:04Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why is everything not in mainline Klipper? ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Klipper3d/klipper Mainline Klipper] is a really large project, with a lot of code and contributors. To keep the code manageable, validated and generic for a lot of different hardware configurations, they implemented stringent contribution rules.&lt;br /&gt;
&lt;br /&gt;
Recore is a small portion of Klipper's user base. While we hope it will grow larger, at present a lot of ongoing development is happening that touches on parts of Klipper, or adds things to Klipper that either conflict with, or don't benefit the Klipper community at large.&lt;br /&gt;
&lt;br /&gt;
The development team is focused on trying to push everything needed into mainline Klipper, but some of the modifications needed to do so are quite time consuming. For now, if you want to install Klipper on Recore from mainline yourself, this page is here to guide you as to what additional add-ons you'll need.&lt;br /&gt;
&lt;br /&gt;
== Additional files needed ==&lt;br /&gt;
&lt;br /&gt;
Some of the Recore's functionality depends on additional python code for Klippy, and this will change depending on which version of Recore you are trying to use.&lt;br /&gt;
&lt;br /&gt;
Specifically, Recore A5 needed more files to work, as the TMC2209, thermistor and thermocouple (PT100/PT1000) didn't use the standard Klipper defaults.&lt;br /&gt;
With A6, things started to normalize, but you still needed a recore.py file, and this is still the case today (26th of May 2024) even with A7 and A8 boards.&lt;br /&gt;
&lt;br /&gt;
=== Recore A5 additional files ===&lt;br /&gt;
&lt;br /&gt;
The Recore A5 needs the following files added in the klipper/klippy/extras/ folder:&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore_a5.py recore_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore.py recore.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore_adc_temperature.py recore_adc_temperature.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/tmc2209_a5.py tmc2209_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/tmc2130_a5.py tmc2130_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/thermocouple.py thermocouple.py]&lt;br /&gt;
&lt;br /&gt;
The default A5 configuration file is available [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/generic-recore-a5.cfg here].&lt;br /&gt;
&lt;br /&gt;
=== Recore A6, A7 and A8 additional files ===&lt;br /&gt;
&lt;br /&gt;
The Recore versions A6, A7 and A8 require only the following file added to the klipper/klippy/extras/ folder:&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore.py recore.py]&lt;br /&gt;
&lt;br /&gt;
For A7 and A8 Recore versions, the STM32F031 chip used has 32kB of memory instead of 16, and so you should use [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/stm32f031-32KB-serial.config this config file] to compile the MCU firmware for it.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Mainline_Klipper&amp;diff=1371</id>
		<title>Mainline Klipper</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Mainline_Klipper&amp;diff=1371"/>
		<updated>2024-05-26T18:15:52Z</updated>

		<summary type="html">&lt;p&gt;Jon: Created page with &amp;quot;== Why is everything not in mainline Klipper? ==  [https://github.com/Klipper3d/klipper Mainline Klipper] is a really large project, with a lot of code and contributors. To ke...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why is everything not in mainline Klipper? ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Klipper3d/klipper Mainline Klipper] is a really large project, with a lot of code and contributors. To keep the code manageable, validated and generic for a lot of different hardware configurations, they implemented stringent contribution rules.&lt;br /&gt;
&lt;br /&gt;
Recore is a small portion of Klipper's user base. While we hope it will grow larger, at present a lot of ongoing development is happening that touches on parts of Klipper, or adds things to Klipper that either conflict with, or don't benefit the Klipper community at large.&lt;br /&gt;
&lt;br /&gt;
The development team is focused on trying to push everything needed into mainline Klipper, but some of the modifications needed to do so are quite time consuming. For now, if you want to install Klipper on Recore from mainline yourself, this page is here to guide you as to what additional add-ons you'll need.&lt;br /&gt;
&lt;br /&gt;
== Additional files needed ==&lt;br /&gt;
&lt;br /&gt;
Some of the Recore's functionality depends on additional python code for Klippy, and this will change depending on which version of Recore you are trying to use.&lt;br /&gt;
&lt;br /&gt;
Specifically, Recore A5 needed more files to work, as the TMC2209, thermistor and thermocouple (PT100/PT1000) didn't use the standard Klipper defaults.&lt;br /&gt;
With A6, things started to normalize, but you still needed a recore.py file, and this is still the case today (26th of May 2024) even with A7 and A8 boards.&lt;br /&gt;
&lt;br /&gt;
=== Recore A5 additional files ===&lt;br /&gt;
&lt;br /&gt;
The Recore A5 needs the following files added in the klipper/src/klippy/extras/ folder:&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore_a5.py recore_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore.py recore.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore_adc_temperature.py recore_adc_temperature.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/tmc2209_a5.py tmc2209_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/tmc2130_a5.py tmc2130_a5.py]&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/thermocouple.py thermocouple.py]&lt;br /&gt;
&lt;br /&gt;
The default A5 configuration file is available [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/generic-recore-a5.cfg here].&lt;br /&gt;
&lt;br /&gt;
=== Recore A6, A7 and A8 additional files ===&lt;br /&gt;
&lt;br /&gt;
The Recore versions A6, A7 and A8 require only the following file added to the klipper/src/klippy/extras/ folder:&lt;br /&gt;
* [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/recore.py recore.py]&lt;br /&gt;
&lt;br /&gt;
For A7 and A8 Recore versions, the STM32F031 chip used has 32kB of memory instead of 16, and so you should use [https://github.com/intelligent-agent/Refactor/blob/c54a15a75e3530493f477c5ed15d3f2b2ce76405/roles/install_klipper/files/stm32f031-32KB-serial.config this config file] to compile the MCU firmware for it.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Main_Page&amp;diff=1370</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Main_Page&amp;diff=1370"/>
		<updated>2024-05-26T08:59:56Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tweekihide:navbar-right}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Delta H.jpg]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the documentation for Recore, Manga Screen 1 and 2, Refactor and Toggle hardware and software products developed by made by Intelligent Agent. All software is free and open source. Recore is open schematic hardware and can be conveniently purchased in the store. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mediawiki&amp;quot; style=&amp;quot;width: 100%; vertical-align:top;&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* [[Recore A8]]&lt;br /&gt;
* [[Recore A7]]&lt;br /&gt;
* [[Recore A6]]&lt;br /&gt;
* [[Remove A1]]&lt;br /&gt;
* [[Restep A1]]&lt;br /&gt;
* [[Rexfer A0]]&lt;br /&gt;
* [[Relit A0]]&lt;br /&gt;
* [[Revolt A2]]&lt;br /&gt;
* [[Rebase A0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Rebuild]] Current Linux OS for Recore&lt;br /&gt;
* [[Refactor]] Legacy Linux OS for Recore&lt;br /&gt;
* [[Reflash]] Image to install Refactor/Rebuild&lt;br /&gt;
* [[Mainline Klipper]] How to use the main Klipper release on Recore&lt;br /&gt;
* [[Toggle]] User interface for OctoPrint&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==HowTo==&lt;br /&gt;
* [[Getting started]]&lt;br /&gt;
* [[Connecting | Connecting to the board]]&lt;br /&gt;
* [[Printer_101 | Printer 101]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [https://discord.gg/bCnp9H5SB5 Discord]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
====Old hardware====&lt;br /&gt;
* [[Replicape Rev B]]&lt;br /&gt;
* [[Replicape Rev A]]&lt;br /&gt;
* [[Manga Screen 2]]&lt;br /&gt;
* [[Manga Screen 1]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
====Off site====&lt;br /&gt;
* [https://www.klipper3d.org/ Klipper] The &amp;quot;firmware&amp;quot; for Replicape/Recore&lt;br /&gt;
* [https://docs.mainsail.xyz/ Mainsail] A modern and responsive user interface for Klipper&lt;br /&gt;
* [https://octoprint.org/ OctoPrint ] A snappy web interface for 3D printers&lt;br /&gt;
* [https://docs.fluidd.xyz/ Fluidd] Responsive web based user interface for Klipper.&lt;br /&gt;
* [https://klipperscreen.readthedocs.io/en/latest/ KlipperScreen] A touchscreen GUI that interfaces with Klipper&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
====Guides====&lt;br /&gt;
* [[BLTouch | Using BLTouch with Replicape]]&lt;br /&gt;
* [[Adding a Servo | Adding a Servo to Replicape]]&lt;br /&gt;
* [[Adding a Probe for G29/G33]]&lt;br /&gt;
* [[Cartesian | Cartesian configuration guide]]&lt;br /&gt;
* [[Corexy | CoreXY configuration guide]]&lt;br /&gt;
* [[OEM_customization | OEM display customisation on Recore]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
* [[ Dev Team Bios | Development Team ]]&lt;br /&gt;
* [[Beta Testing | Running the Develop Branch on Your Printer]]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
* [[Special:CreateAccount | Add new users to this wiki]]&lt;br /&gt;
* [[Formatting | Formatting on this wiki]]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
== Legacy Information ==&lt;br /&gt;
* [[Thing]]&lt;br /&gt;
* [[Thing Delta]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Recore_A6&amp;diff=1073</id>
		<title>Recore A6</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Recore_A6&amp;diff=1073"/>
		<updated>2024-01-24T10:22:48Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint. The main features are: &lt;br /&gt;
* Allwinner A64 SoC, quad core CPU running at 1 GHz. &lt;br /&gt;
* 1 GB of DDR3 RAM&lt;br /&gt;
* 8 GB of on board eMMC &lt;br /&gt;
* Gigabit Ethernet&lt;br /&gt;
* 6 TMC2209, 2 A stepper motor drivers&lt;br /&gt;
* 3 heater outputs + high power heated bed&lt;br /&gt;
* 4 USB High Speed ports &lt;br /&gt;
* 4 thermistor/thermocouple inputs (software selectable)&lt;br /&gt;
* Comes with Debian Linux with Klipper and OctoPrint installed&lt;br /&gt;
&lt;br /&gt;
This document is for Recore Revision A6. For previous hardware revisions, please see:  &lt;br /&gt;
* [[Recore_A5]]&lt;br /&gt;
* [[Recore_A4]]&lt;br /&gt;
* [[Recore_A3]]  &lt;br /&gt;
* [[Recore_A2]]&lt;br /&gt;
&lt;br /&gt;
==Availability==&lt;br /&gt;
Recore A6 can no longer be purchased from the Intelligent Agent web shop [https://www.iagent.no/product/recore/ https://www.iagent.no/product/recore/] - instead you will receive the newer [[Recore_A7]] or later batch as they become available.&lt;br /&gt;
&lt;br /&gt;
== Software release notes ==&lt;br /&gt;
&lt;br /&gt;
Currently, the latest version to use to flash a Recore A6 is tested as [https://github.com/intelligent-agent/Reflash/releases/tag/v0.0.8 Reflash 0.0.8]&lt;br /&gt;
&lt;br /&gt;
The latest recommended versions of Refactor to flash on Recore A6 is [https://github.com/intelligent-agent/Refactor/releases/tag/v3.1.3 ReFactor 3.1.3]&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Recore is &amp;quot;open schematic&amp;quot;, it is available here: [https://github.com/intelligent-agent/Recore/tree/master/Schematics https://github.com/intelligent-agent/Recore/tree/master/Schematics]&lt;br /&gt;
&lt;br /&gt;
=Pinout=&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Pinout A6-2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==A64==&lt;br /&gt;
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) clocked at 300 MHz that handles the real time aspect for the 3D-printer. In the following table the pins used for End-stops and stepper control are described. &lt;br /&gt;
The &amp;quot;bank and pin&amp;quot; can be used to specify the pin numbers in klipper. &lt;br /&gt;
The &amp;quot;Number&amp;quot; column is useful for testing things on the command line in conjunction with gpiod.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!Number&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 0&lt;br /&gt;
|PH4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|228&lt;br /&gt;
|DIR 6&lt;br /&gt;
|PE14&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|142&lt;br /&gt;
|USB-PWR-EN-0&lt;br /&gt;
|PH0&lt;br /&gt;
|224&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 1&lt;br /&gt;
|PH5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|229&lt;br /&gt;
|DIR 7&lt;br /&gt;
|PE15&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|143&lt;br /&gt;
|USB-PWR-EN-1&lt;br /&gt;
|PH1&lt;br /&gt;
|225&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 2&lt;br /&gt;
|PH6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|230&lt;br /&gt;
|STEP DIAG 0&lt;br /&gt;
|PE0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|128&lt;br /&gt;
|USB-PWR-EN-2&lt;br /&gt;
|PH2&lt;br /&gt;
|226&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 3&lt;br /&gt;
|PH7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|231&lt;br /&gt;
|STEP DIAG 1&lt;br /&gt;
|PE1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|129&lt;br /&gt;
|USB-PWR-EN-3&lt;br /&gt;
|PH3&lt;br /&gt;
|227&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 4&lt;br /&gt;
|PH8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|232&lt;br /&gt;
|STEP DIAG 2&lt;br /&gt;
|PE2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|130&lt;br /&gt;
|GAIN-ENABLE-T0&lt;br /&gt;
|PD4&lt;br /&gt;
|100&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 5&lt;br /&gt;
|PH9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|233&lt;br /&gt;
|STEP DIAG 3&lt;br /&gt;
|PE3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|131&lt;br /&gt;
|GAIN-ENABLE-T1&lt;br /&gt;
|PH11&lt;br /&gt;
|235&lt;br /&gt;
|-&lt;br /&gt;
|STEP 0&lt;br /&gt;
|PL4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|4&lt;br /&gt;
|STEP DIAG 4&lt;br /&gt;
|PE4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|132&lt;br /&gt;
|GAIN ENABLE T2&lt;br /&gt;
|PE17&lt;br /&gt;
|145&lt;br /&gt;
|-&lt;br /&gt;
|STEP 1&lt;br /&gt;
|PL5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|5&lt;br /&gt;
|STEP DIAG 5&lt;br /&gt;
|PE5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|133&lt;br /&gt;
|GAIN ENABLE T3&lt;br /&gt;
|PB2&lt;br /&gt;
|34&lt;br /&gt;
|-&lt;br /&gt;
|STEP 2&lt;br /&gt;
|PL6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|6&lt;br /&gt;
|STEP DIAG 6&lt;br /&gt;
|PE6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|134&lt;br /&gt;
|PU-ENABLE-T0&lt;br /&gt;
|PG10&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|STEP 3&lt;br /&gt;
|PL7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|7&lt;br /&gt;
|STEP DIAG 7&lt;br /&gt;
|PE7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|135&lt;br /&gt;
|PU-ENABLE-T1&lt;br /&gt;
|PG11&lt;br /&gt;
|203&lt;br /&gt;
|-&lt;br /&gt;
|STEP 4&lt;br /&gt;
|PL8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|8&lt;br /&gt;
|OC-ALERT&lt;br /&gt;
|PF6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|166&lt;br /&gt;
|PU ENABLE T2&lt;br /&gt;
|PG12&lt;br /&gt;
|204&lt;br /&gt;
|-&lt;br /&gt;
|STEP 5&lt;br /&gt;
|PL9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|9&lt;br /&gt;
|OC-RESET&lt;br /&gt;
|PF4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|164&lt;br /&gt;
|PU ENABLE T3&lt;br /&gt;
|PG13&lt;br /&gt;
|205&lt;br /&gt;
|-&lt;br /&gt;
|STEP 6&lt;br /&gt;
|PL10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|10&lt;br /&gt;
|EN-HP&lt;br /&gt;
|PF5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|165&lt;br /&gt;
|OFFSET-T0&lt;br /&gt;
|PG0&lt;br /&gt;
|192&lt;br /&gt;
|-&lt;br /&gt;
|STEP 7&lt;br /&gt;
|PL11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|11&lt;br /&gt;
|UC-INT-1&lt;br /&gt;
|PG3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|195&lt;br /&gt;
|OFFSET-T1&lt;br /&gt;
|PG1&lt;br /&gt;
|193&lt;br /&gt;
|-&lt;br /&gt;
|DIR 0&lt;br /&gt;
|PE8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|136&lt;br /&gt;
|UC-NRST&lt;br /&gt;
|PG4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|196&lt;br /&gt;
|OFFSET-T2&lt;br /&gt;
|PG3&lt;br /&gt;
|194&lt;br /&gt;
|-&lt;br /&gt;
|DIR 1&lt;br /&gt;
|PE9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|137&lt;br /&gt;
|UC-BOOT&lt;br /&gt;
|PG5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|197&lt;br /&gt;
|OFFSET-T3&lt;br /&gt;
|PG8&lt;br /&gt;
|200&lt;br /&gt;
|-&lt;br /&gt;
|DIR 2&lt;br /&gt;
|PE10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|138&lt;br /&gt;
|ES-EN-12V&lt;br /&gt;
|PF0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|160&lt;br /&gt;
|STEPPER UART 2 TX&lt;br /&gt;
|PB0&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|DIR 3&lt;br /&gt;
|PE11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|139&lt;br /&gt;
|EN-HDMI-PWR&lt;br /&gt;
|PG9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|201&lt;br /&gt;
|STEPPER UART 2 RX&lt;br /&gt;
|PB1&lt;br /&gt;
|33&lt;br /&gt;
|-&lt;br /&gt;
|DIR 4&lt;br /&gt;
|PE12&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|140&lt;br /&gt;
|EN-THERMISTORS&lt;br /&gt;
|PF1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|161&lt;br /&gt;
|STEPPER UART 3 TX&lt;br /&gt;
|PD0&lt;br /&gt;
|96&lt;br /&gt;
|-&lt;br /&gt;
|DIR 5&lt;br /&gt;
|PE13&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|141&lt;br /&gt;
|EN-ENDSTOPS&lt;br /&gt;
|PF2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|162&lt;br /&gt;
|STEPPER UART 3 RX&lt;br /&gt;
|PD1&lt;br /&gt;
|97&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==STM32F031==&lt;br /&gt;
The STM32 is a Cortex M0 powered micro controller handling analog inputs and PWM outputs. It does not control any hard real time aspects of the print, that is handled by the AR100 core realized as a separate core in the A64 SoC. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!Number&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 0&lt;br /&gt;
|PA0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|6&lt;br /&gt;
|HEATER E0&lt;br /&gt;
|PA8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|18&lt;br /&gt;
|FAN 0&lt;br /&gt;
|PB0&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 1&lt;br /&gt;
|PA1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|7&lt;br /&gt;
|HEATER E1&lt;br /&gt;
|PA9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|19&lt;br /&gt;
|FAN 1&lt;br /&gt;
|PB1&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 2&lt;br /&gt;
|PA2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|8&lt;br /&gt;
|HEATER E2&lt;br /&gt;
|PA10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|20&lt;br /&gt;
&lt;br /&gt;
|ES1-PWM-OUT&lt;br /&gt;
|PB3&lt;br /&gt;
|26&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 3&lt;br /&gt;
|PA3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|9&lt;br /&gt;
|HEATER BED&lt;br /&gt;
|PA11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|21&lt;br /&gt;
|FAN 3&lt;br /&gt;
|PB4&lt;br /&gt;
|27&lt;br /&gt;
|-&lt;br /&gt;
|BOARD VOLTAGE&lt;br /&gt;
|PA4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|10&lt;br /&gt;
|USER LED&lt;br /&gt;
|PA12&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|22&lt;br /&gt;
|FAN 2&lt;br /&gt;
|PB5&lt;br /&gt;
|28&lt;br /&gt;
|-&lt;br /&gt;
|BOARD CURRENT&lt;br /&gt;
|PA5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|PWM-ES2-OUT&lt;br /&gt;
|PB6&lt;br /&gt;
|29&lt;br /&gt;
|-&lt;br /&gt;
|BOARD TEMPERATURE&lt;br /&gt;
|PA6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|12&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|EXT 1&lt;br /&gt;
|PB7&lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
|COLD JUNCTION&lt;br /&gt;
|PA7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|EXT 2&lt;br /&gt;
|PB8&lt;br /&gt;
|32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==DBG header==&lt;br /&gt;
This header is used for interacting with u-boot and getting early debug messages from the Linux kernel&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|NC&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MCU header==&lt;br /&gt;
This header is used for connecting additional MCU peripherals. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|PB7&lt;br /&gt;
|I2C1_SDA&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|PB8&lt;br /&gt;
|I2C1_SCL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|0.7-3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LEDs===&lt;br /&gt;
There are 15 white LEDs on the board. Here is what they mean&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Location&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|By PMIC&lt;br /&gt;
|Board powered&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|By heater BED &lt;br /&gt;
|BED output on&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|By fan 0&lt;br /&gt;
|Fan 0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|By fan 1&lt;br /&gt;
|Fan 1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D6&lt;br /&gt;
|By heater H2&lt;br /&gt;
|Heater H2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D7&lt;br /&gt;
|By fan 2&lt;br /&gt;
|Fan 2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D8&lt;br /&gt;
|By heater H0&lt;br /&gt;
|Heater H0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D9&lt;br /&gt;
|By fan 3&lt;br /&gt;
|Fan 3 is on&lt;br /&gt;
|-&lt;br /&gt;
|D10&lt;br /&gt;
|By heater H1&lt;br /&gt;
|Heater H1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D12&lt;br /&gt;
|By input connector&lt;br /&gt;
|High voltage domain is on&lt;br /&gt;
|-&lt;br /&gt;
|D15&lt;br /&gt;
|By eMMC chip&lt;br /&gt;
|eMMC activity&lt;br /&gt;
|-&lt;br /&gt;
|D17&lt;br /&gt;
|By HDMI connector&lt;br /&gt;
|USB activitiy&lt;br /&gt;
|-&lt;br /&gt;
|D18&lt;br /&gt;
|By the USB C connector&lt;br /&gt;
|Linux Heartbeat&lt;br /&gt;
|-&lt;br /&gt;
|D19&lt;br /&gt;
|By the A64 SoC&lt;br /&gt;
|CPU activity&lt;br /&gt;
|-&lt;br /&gt;
|D20&lt;br /&gt;
|By the STM32&lt;br /&gt;
|Klipper running on STM32&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are 3 push buttons on the board. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|FEL&lt;br /&gt;
|Enter FEL-mode of the A64&lt;br /&gt;
|-&lt;br /&gt;
|BOOT&lt;br /&gt;
|Boots or shuts down the board&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|Hard reset of the CPU&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Current limits==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name&lt;br /&gt;
!Limit&lt;br /&gt;
|-&lt;br /&gt;
|5V-ES&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|USB host each&lt;br /&gt;
|1.0 A&lt;br /&gt;
|-&lt;br /&gt;
|Thermistors&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|MCU connector&lt;br /&gt;
|0.5 A&lt;br /&gt;
|-&lt;br /&gt;
|Fan connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|Heater connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Wiring=&lt;br /&gt;
Below is a wiring diagram meant to aid in connecting motors, fans, extruders and hot ends to the control board. On the board, there is a small + sign next to output connectors where polarity is important. If passive heating elements are used, polarity is not important, but if those outputs are to be used with SSRs or relays, polarity must be observed. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore-wire-diagram-2.2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Network connection==&lt;br /&gt;
Recore is designed to be controlled through a browser on a computer, so the board must be connected to the local LAN or wifi network. Connect an ethernet cable between the board and a switch. The ping utility can be used to ensure that the board is discovered on the network.&lt;br /&gt;
&lt;br /&gt;
===LAN setup===&lt;br /&gt;
Recore with Refactor is running avahi and should announce itself on the network once a connection has been established. On a Linux based host computer, it is possible to search for a booted device using the following command: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ping recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the device is present, an SSH connection can be established:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Furthermore, a web interface running OctoPrint can be found using a browser:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
==Wifi setup==&lt;br /&gt;
Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the uSB dongle has been connected, and the board has been booted, access to the terminal command line can be given through a host computer. The board should appear as a TTY ACM device. On a Linux based host computer, the terminal program `screen` can be used to get access. From the host computer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
screen /dev/ttyACM0 115200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the host computer is running Windows, [https://www.putty.org/ Putty] can be used to get access. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established, the wifi network can be set up using the command nmtui. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nmtui&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Follow the instructions on screen to edit and activate the wifi connection. &lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered. See also known hardware issues at the [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|bottom of this page]]. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mating Connectors==&lt;br /&gt;
The power connectors on the board are available either in the web shop as part of a [https://www.iagent.no/product/connector-pack/ connector pack] or directly from Digi-key etc.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Connectors-all.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Four pin male: TBP01P1-508-04BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-04BE/10238369 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
Two pin male: TBP01P1-508-02BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-02BE/10238367 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
=Klipper Configuration=&lt;br /&gt;
There are no jumpers on Recore and no hard fuses. Everything is software configurable and resettable from software. This gives great power and flexibility without requiring physical access to the board once it has been installed. But with great power comes great responsibility. It is possible to break things if care is not taken during setup. There is one setting in particular that is worth mentioning: ES0 can have either +5V or +12V on the power pin. This is in order to allow a standard industrial inductive sensor to be used on that end stop. If a 5V only peripheral is connected, that could damage the connected peripheral. &lt;br /&gt;
&lt;br /&gt;
The default config file for Recore A6 can be found in the repository: [https://github.com/intelligent-agent/klipper/blob/master/config/generic-recore-a6.cfg generic-recore-a6.cfg]&lt;br /&gt;
&lt;br /&gt;
===TMC2209===&lt;br /&gt;
The 6 stepper drivers on Recore are of type TMC2209 from Trinamic. Each stepper has a configuration interface with a bidirectional UART port that is connected to a peripheral UART on the A64. The peripheral is not in use, but instead the GPIO bit-banging functionality of Klipper is used to communicate with the stepper drivers. &lt;br /&gt;
&lt;br /&gt;
Here is a table with pins and addresses for the steppers&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Stepper driver config&lt;br /&gt;
|-&lt;br /&gt;
|Name&lt;br /&gt;
|Pins&lt;br /&gt;
|Address&lt;br /&gt;
|-&lt;br /&gt;
|S0&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S1&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S2&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S3&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|S4&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S5&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S6&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S7&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External stepper drivers ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Ext-driver.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. &lt;br /&gt;
These can be connected using the headers S6 and S7.&lt;br /&gt;
&lt;br /&gt;
==Temperature inputs==&lt;br /&gt;
4 different temperature devices can be connected to the 4 analog inputs on Recore. Thermistor, Thermocouple, PT100 with INA826 and PT1000 without the use of a pre-amplifier.&lt;br /&gt;
===Thermistor===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermistor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the op-amp gain is set to 1.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermocouple.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure the pull-up is disabled and the op-amp gain is set to 100.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[recore]&lt;br /&gt;
...&lt;br /&gt;
gain_t0: 100&lt;br /&gt;
pullup_t0: 0&lt;br /&gt;
offset_t0: 1&lt;br /&gt;
&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: Type K&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PT100 with INA826===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT100.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to use a PT100 sensor, an external amplifier board must be used. There is an example configuration for Klipper that &lt;br /&gt;
uses this. The ADC reference voltage is 5.0 by default, but for Recore it is 3.3 V. Here is an example:  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT100 INA826&lt;br /&gt;
adc_voltage: 3.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pull-up must also be disabled.&lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT1000.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the gain is set to 1. In the latest version, the sensor must be prefixed with RECORE. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT1000&lt;br /&gt;
pullup_resistor: 4750&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Connecting other sensors=&lt;br /&gt;
The board has been designed to work with a range of 3rd party sensors for automating the print.&lt;br /&gt;
==BLtouch==&lt;br /&gt;
There are two versions of the BLtouch, the difference is the color of one of the GND wires. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Antclabs BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The Creality version has a blue GND wire. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Creality BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
There have been some cases of bad quality control for the Creality BLTouches, where the pinout on the sensor side have not matched the color coding in the photos/documentation. It might be good to make sure the color codes match up. For the Creality it should be, from left to right: &lt;br /&gt;
Blue, red, yellow, black, white. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When connected per wiring diagram above, setting up BLtouch can be done by adding the following section to printer.cfg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bltouch]&lt;br /&gt;
sensor_pin: ar100:PH6&lt;br /&gt;
control_pin: !PB3&lt;br /&gt;
speed:15&lt;br /&gt;
samples:1&lt;br /&gt;
pin_move_time: 0.675&lt;br /&gt;
sample_retract_dist: 10&lt;br /&gt;
probe_with_touch_mode: true&lt;br /&gt;
stow_on_each_sample: false&lt;br /&gt;
x_offset:29.2&lt;br /&gt;
y_offset:-34&lt;br /&gt;
z_offset:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inductive Sensor ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inductive sensor wiring 2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin. Inductive sensors often come with an industry standard voltage input of 6-36 V. For this reason there is a 12 V LDO (Low drop-out) voltage regulator integrated on the board. This voltage regulator can be output on the V+ pin of the connector marked ES0. If the Input to the board is 12 V, the LDO will supply a lower voltage, around 10.6 or so.&lt;br /&gt;
&lt;br /&gt;
==ADXL345==&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A popular accelerometer sensor for doing input shaping with Klipper is the ADXL345. This can be connected to the connectors S6/S7. There is no hardware SPI interface available, but a software implementation in Klipper exists. &lt;br /&gt;
Note: Only experimental support has been tested for this. &lt;br /&gt;
https://learn.adafruit.com/adxl345-digital-accelerometer&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: ar100:PL11&lt;br /&gt;
spi_software_sclk_pin: ar100:PL10&lt;br /&gt;
spi_software_mosi_pin: ar100:PE15&lt;br /&gt;
spi_software_miso_pin: ar100:PE14&lt;br /&gt;
rate: 400&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a Raspberry Pi Pico:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: pico:gpio17&lt;br /&gt;
spi_bus: spi0c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RC Servo==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:RC-servo.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Endstop 1 and 2 can be used as PWM outputs with 5V levels. Rev A6 is the first board with support for this. &lt;br /&gt;
More testing and configuration documentation is needed.&lt;br /&gt;
&lt;br /&gt;
==Filament runout sensor==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Filament-runout-sensor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Any of the 6 end stops can be used for connecting a filament runout sensor&lt;br /&gt;
&lt;br /&gt;
=Software for Recore=&lt;br /&gt;
Recore comes with the Linux distro Refactor (Armbian) pre-installed on the eMMC. &lt;br /&gt;
For more instructions about software for Recore, see the Refactor wiki page: &lt;br /&gt;
[[ Refactor#Recore ]]&lt;br /&gt;
&lt;br /&gt;
=== AR100 ===&lt;br /&gt;
Please see: [[AR100]]&lt;br /&gt;
&lt;br /&gt;
=== Manual control and testing ===&lt;br /&gt;
https://wiki.iagent.no/wiki/Manual_control_and_testing&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
==Start-up time==&lt;br /&gt;
With a maximum clock for MMC2 of 200 MHz, here is the start-up time: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore-3:~# systemd-analyze &lt;br /&gt;
Startup finished in 5.128s (kernel) + 11.567s (userspace) = 16.695s &lt;br /&gt;
graphical.target reached after 11.421s in userspace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measured voltages==&lt;br /&gt;
The final stages of Recore manufacturing consists of testing, calibration and flashing of firmware. &lt;br /&gt;
The calibration stage measures a number of voltages on the board and classifies the input stages gain and offset. &lt;br /&gt;
Instruments used: &lt;br /&gt;
* HP 3458A, 8.5 digit multimeter&lt;br /&gt;
* HP 3245A, Universal Source &lt;br /&gt;
&lt;br /&gt;
====Microcontroller voltages====&lt;br /&gt;
VDDA uC: 3.312 V&amp;lt;br&amp;gt;&lt;br /&gt;
VDD uC: 3.312 V&lt;br /&gt;
&lt;br /&gt;
Voltage from the PMIC supplied as bias:&amp;lt;br&amp;gt;&lt;br /&gt;
0.706 V &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====5V Buck converter ripple and noise ====&lt;br /&gt;
The 5V step down/Buck converter is a AOZ2151PQI-10. It can provide 4A and has an input voltage range of 12-28V. &lt;br /&gt;
It is hard wired to be in PWM mode. PFM mode results in a loud whine.&lt;br /&gt;
&lt;br /&gt;
Below is a screenshot of the ripple and noise across the  the 5V rail with a normal kernel running. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:VCC-5V-ripple-A4.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input stage===&lt;br /&gt;
An experiment with a constant current load drawing 20 A from the bed connector with and without a 92 mm fan on top of the board for forced convection. The temperature measured was with the on board thermistor. Using a thermal camera, the temperature displayed matches well with the temperature reported by the camera. However, in Rev A2, this is not the hottest point on the board. The MOSFET controlling the bed seems to consistently get the highest temperature. The reason for this is probably due to a 3.3 V VGS. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File: Temperature-fan-off.pdf.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Temperature-fan.pdf.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Inrush current====&lt;br /&gt;
During turn on of the high power stage, there will be an inrush current to charge up the bank of capacitors present on the board. &lt;br /&gt;
If no loads are turned on, the inrush current reaches 48 A at peak. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A6 when the input is enabled. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inrush-curent-A6-6-steppers.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. &lt;br /&gt;
# The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. &lt;br /&gt;
# The current limit set in Klipper monitors the continuous current draw. This is now set at 20 A, but can go up to 30 A and still be within the limits of the connectors and input stage mosfets. &lt;br /&gt;
# The over temperature protection monitors the temperature in the input stage and cuts the power if the temperature goes over 110 degrees. The board should not be kept at this temperature for a prolonged period, but during heated bed heat-up, it can be elevated compared to the rest of the print.&lt;br /&gt;
&lt;br /&gt;
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Over-current-short-circuit-50A.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ADC offset and gain measurements===&lt;br /&gt;
To measure the ADC offset error, measure the voltage on the uC input pin and record when the &lt;br /&gt;
transition from 0 to 1 occurs. It should occur at 0.5 LSB = 3.3/4096/2 = 0.4028 mV. &lt;br /&gt;
Offset: 55.35 mV - 0.4028 mV = 54.95 mV&lt;br /&gt;
&lt;br /&gt;
==Temperature calibration==&lt;br /&gt;
A set of experiments have been carried out to calibrate the different sensors using a dry-well calibrator. &lt;br /&gt;
The reference probe was a Sensing Devices SDL385 PRT. &lt;br /&gt;
The levels of calibration was: room temperature, 50, 100, 150, and 200 degrees C.&lt;br /&gt;
&lt;br /&gt;
===Thermistor===&lt;br /&gt;
The thermistor in use was a standard EPCOS 100K B57560G104F. This thermistor has a resistance tolerance of 2 %. The value of the pull-up resistor as measured during calibration was 4740.17501. This value seemed to work well at all levels of calibration, although a little on the high side compared to the reference. &lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
The PT1000 in use was a Heraeus 31500989 [https://www.heraeus.com/media/media/hne/datasheets/sensor_assemblies_1/Heraeus_W-EYK_Sensor_E.pdf] works well. The tolerance class given in the datasheet is &amp;quot;F 0.10 / Class 1/3 B&amp;quot;. There are two different tolerances here: F0.10 and one third of Class B. The accuracy looks good at all temperatures, perhaps a bit on the high side if using the calibrated value for the pull-up. During the testing, 10 ohm was subtracted from the calibrated value.&lt;br /&gt;
&lt;br /&gt;
===PT100===&lt;br /&gt;
The PT100 used in the calibration was the E3D PT100 with the INA826 amplifier board. There is no datasheet available for the PT100 sensor and no mention of what tolerance there is on the reference resistors used. Furthermore Klipper expects the reference voltage to be 5V exactly, and there is no way to supply a measured value. Measurements on Recore has shown that the value is often a bit lower due to the PMIC for the 5V output on the &amp;quot;input&amp;quot; ports. 4.979 V has been measured and is likely an expected value.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
Using the calibration values directly will give a slight offset to the thermocouple measurements. &lt;br /&gt;
The gain and ADC voltage can be used as measured during calibration. It should be in the region of 101 for gain and 3.307 for ADC voltage. As for the offset, that can be increased slightly to compensate for the cold junction temperature difference. For instance, the measured offset for the test board was 0.0032960, but a value of 0.00340 fit the data points well. The measurements were done on T2, so it it possible that the distance from the cold junction caused the offset. The cold junction thermistor is located between T0 and T1.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
====Where can I ask for help?====&lt;br /&gt;
:You can join the Discord: https://discord.gg/bCnp9H5SB5&lt;br /&gt;
====What comes in the box with the Recore? Specifically, terminal connectors for power, etc?====&lt;br /&gt;
:It's only the board, no cables or connectors. There is a bag of connectors available to purchase in the web shop.&lt;br /&gt;
====Do I need access to those 3 buttons on the board?====&lt;br /&gt;
:It is not necessary to have access to the three buttons for normal use.&lt;br /&gt;
====What's the maximum current draw for heat bed?====&lt;br /&gt;
:This has been tested up to 20 A&lt;br /&gt;
====Why are there unused and unbroken out pins on the STM32 MCU?====&lt;br /&gt;
:The pins that are needed from the MCU have been routed out plus two pins available on an external header.&lt;br /&gt;
====I have a gadget that I want to connect with SPI. Is that possible?====&lt;br /&gt;
:There are 6 pins available from the main SoC that can be used for various things.There is no hardware SPI, but you can make a program that uses soft SPI. There is no dedicated I2C, but perhaps that would be a nice addition.&lt;br /&gt;
&lt;br /&gt;
====What exactly is the role of the AR100 device?====&lt;br /&gt;
:The AR100 handles the fast real-time aspects, mainly the stepper motors and end stops.&lt;br /&gt;
&lt;br /&gt;
====What voltage fans are supported?====&lt;br /&gt;
:The same voltage as the input voltage, either 12 V or 24 V. You can experiment with PWM for running lower voltage fans on 24 V input.&lt;br /&gt;
====Where is the board layout file?====&lt;br /&gt;
:The Layout file will not be available. It is an &amp;quot;open schematic&amp;quot; board, not open source hardware&lt;br /&gt;
====Where are you shipping from?====&lt;br /&gt;
:Boards are shipping from Norway. Eventually shipping will be from a warehouse in the US&lt;br /&gt;
&lt;br /&gt;
= Known hardware issues for rev A6=&lt;br /&gt;
===T1 offset is not consistent===&lt;br /&gt;
:On Rev A6, during calibration it has been discovered that the offset on T1 is often varying around the predetermined set point of 0.33 V. It seems the cause of this is the batch of op-amps used, so it is a hardware issue. The good news is that it seems to be OK to use the values from the calibration document. The gain should be about the same (101). &lt;br /&gt;
&lt;br /&gt;
===Board can not handle 24 V input (fixed)===&lt;br /&gt;
[[File:Connector with capacitor.jpg|thumb|Connector with capacitor]]&lt;br /&gt;
[[File:Board with capacitor.jpg|thumb|Board with capacitor]]&lt;br /&gt;
:The design without alterations can not handle 24 V input. A bare board can only handle about 20 V. A workaround is to add an electrolytic capacitor to the input. This can either be soldered on to the step down converter input MLCC capacitors, or it can be screwed directly on to the input connector. Be aware of the polarity of the capacitor when mounting it. The &amp;quot;minus&amp;quot; should be towards the black wire. The recommended value is a 47 uF capacitor with a voltage rating of 35 V or higher. 33 uF has also been tested and working. 100 uF and higher should also work, but has not been tested specifically.&lt;br /&gt;
&lt;br /&gt;
:The capacitor that will be added to remaining boards from the Rev A6 batch is ESH476M035AE3AA from Kemet: https://www.digikey.com/en/products/detail/kemet/ESH476M035AE3AA/2712504&lt;br /&gt;
&lt;br /&gt;
:It seems the reason for the issue is a combination of long wires with high inductance, too low capacitance on the input of the board and too little headroom on the step down converter. This can cause voltage spikes that makes the input voltage go above the rated input voltage during load changes. Adding a capacitor to the input &amp;quot;buffers&amp;quot; or &amp;quot;decouples&amp;quot; the long inductance wires and limits the voltage spikes.&lt;br /&gt;
&lt;br /&gt;
===USB connectors not discovered when powered by USB device (workaround)===&lt;br /&gt;
:Some boards are not initialized right when powered by only the USB port. The reason for this is that the VBUS/over current input on the USB hub can get an ambiguous value from USB connector 2 and 3 (the two USB host connectors close to the ethernet connector). &lt;br /&gt;
:A workaround is to apply power to the VIN (12-24V) connector first. If FEL-mode is necessary, that button must be pressed as power is applied from the VIN connector. After that the USB connector can be inserted.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Recore_A6&amp;diff=1072</id>
		<title>Recore A6</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Recore_A6&amp;diff=1072"/>
		<updated>2024-01-24T10:19:29Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint. The main features are: &lt;br /&gt;
* Allwinner A64 SoC, quad core CPU running at 1 GHz. &lt;br /&gt;
* 1 GB of DDR3 RAM&lt;br /&gt;
* 8 GB of on board eMMC &lt;br /&gt;
* Gigabit Ethernet&lt;br /&gt;
* 6 TMC2209, 2 A stepper motor drivers&lt;br /&gt;
* 3 heater outputs + high power heated bed&lt;br /&gt;
* 4 USB High Speed ports &lt;br /&gt;
* 4 thermistor/thermocouple inputs (software selectable)&lt;br /&gt;
* Comes with Debian Linux with Klipper and OctoPrint installed&lt;br /&gt;
&lt;br /&gt;
This document is for Recore Revision A6. For previous hardware revisions, please see:  &lt;br /&gt;
* [[Recore_A5]]&lt;br /&gt;
* [[Recore_A4]]&lt;br /&gt;
* [[Recore_A3]]  &lt;br /&gt;
* [[Recore_A2]]&lt;br /&gt;
&lt;br /&gt;
==Availability==&lt;br /&gt;
Recore A6 can no longer be purchased from the Intelligent Agent web shop [https://www.iagent.no/product/recore/ https://www.iagent.no/product/recore/] - instead you will receive the newer [[Recore_A7]] or later batch as they become available.&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Recore is &amp;quot;open schematic&amp;quot;, it is available here: [https://github.com/intelligent-agent/Recore/tree/master/Schematics https://github.com/intelligent-agent/Recore/tree/master/Schematics]&lt;br /&gt;
&lt;br /&gt;
=Pinout=&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Pinout A6-2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==A64==&lt;br /&gt;
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) clocked at 300 MHz that handles the real time aspect for the 3D-printer. In the following table the pins used for End-stops and stepper control are described. &lt;br /&gt;
The &amp;quot;bank and pin&amp;quot; can be used to specify the pin numbers in klipper. &lt;br /&gt;
The &amp;quot;Number&amp;quot; column is useful for testing things on the command line in conjunction with gpiod.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!Number&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 0&lt;br /&gt;
|PH4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|228&lt;br /&gt;
|DIR 6&lt;br /&gt;
|PE14&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|142&lt;br /&gt;
|USB-PWR-EN-0&lt;br /&gt;
|PH0&lt;br /&gt;
|224&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 1&lt;br /&gt;
|PH5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|229&lt;br /&gt;
|DIR 7&lt;br /&gt;
|PE15&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|143&lt;br /&gt;
|USB-PWR-EN-1&lt;br /&gt;
|PH1&lt;br /&gt;
|225&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 2&lt;br /&gt;
|PH6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|230&lt;br /&gt;
|STEP DIAG 0&lt;br /&gt;
|PE0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|128&lt;br /&gt;
|USB-PWR-EN-2&lt;br /&gt;
|PH2&lt;br /&gt;
|226&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 3&lt;br /&gt;
|PH7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|231&lt;br /&gt;
|STEP DIAG 1&lt;br /&gt;
|PE1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|129&lt;br /&gt;
|USB-PWR-EN-3&lt;br /&gt;
|PH3&lt;br /&gt;
|227&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 4&lt;br /&gt;
|PH8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|232&lt;br /&gt;
|STEP DIAG 2&lt;br /&gt;
|PE2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|130&lt;br /&gt;
|GAIN-ENABLE-T0&lt;br /&gt;
|PD4&lt;br /&gt;
|100&lt;br /&gt;
|-&lt;br /&gt;
|END STOP 5&lt;br /&gt;
|PH9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|233&lt;br /&gt;
|STEP DIAG 3&lt;br /&gt;
|PE3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|131&lt;br /&gt;
|GAIN-ENABLE-T1&lt;br /&gt;
|PH11&lt;br /&gt;
|235&lt;br /&gt;
|-&lt;br /&gt;
|STEP 0&lt;br /&gt;
|PL4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|4&lt;br /&gt;
|STEP DIAG 4&lt;br /&gt;
|PE4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|132&lt;br /&gt;
|GAIN ENABLE T2&lt;br /&gt;
|PE17&lt;br /&gt;
|145&lt;br /&gt;
|-&lt;br /&gt;
|STEP 1&lt;br /&gt;
|PL5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|5&lt;br /&gt;
|STEP DIAG 5&lt;br /&gt;
|PE5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|133&lt;br /&gt;
|GAIN ENABLE T3&lt;br /&gt;
|PB2&lt;br /&gt;
|34&lt;br /&gt;
|-&lt;br /&gt;
|STEP 2&lt;br /&gt;
|PL6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|6&lt;br /&gt;
|STEP DIAG 6&lt;br /&gt;
|PE6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|134&lt;br /&gt;
|PU-ENABLE-T0&lt;br /&gt;
|PG10&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|STEP 3&lt;br /&gt;
|PL7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|7&lt;br /&gt;
|STEP DIAG 7&lt;br /&gt;
|PE7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|135&lt;br /&gt;
|PU-ENABLE-T1&lt;br /&gt;
|PG11&lt;br /&gt;
|203&lt;br /&gt;
|-&lt;br /&gt;
|STEP 4&lt;br /&gt;
|PL8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|8&lt;br /&gt;
|OC-ALERT&lt;br /&gt;
|PF6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|166&lt;br /&gt;
|PU ENABLE T2&lt;br /&gt;
|PG12&lt;br /&gt;
|204&lt;br /&gt;
|-&lt;br /&gt;
|STEP 5&lt;br /&gt;
|PL9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|9&lt;br /&gt;
|OC-RESET&lt;br /&gt;
|PF4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|164&lt;br /&gt;
|PU ENABLE T3&lt;br /&gt;
|PG13&lt;br /&gt;
|205&lt;br /&gt;
|-&lt;br /&gt;
|STEP 6&lt;br /&gt;
|PL10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|10&lt;br /&gt;
|EN-HP&lt;br /&gt;
|PF5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|165&lt;br /&gt;
|OFFSET-T0&lt;br /&gt;
|PG0&lt;br /&gt;
|192&lt;br /&gt;
|-&lt;br /&gt;
|STEP 7&lt;br /&gt;
|PL11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|11&lt;br /&gt;
|UC-INT-1&lt;br /&gt;
|PG3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|195&lt;br /&gt;
|OFFSET-T1&lt;br /&gt;
|PG1&lt;br /&gt;
|193&lt;br /&gt;
|-&lt;br /&gt;
|DIR 0&lt;br /&gt;
|PE8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|136&lt;br /&gt;
|UC-NRST&lt;br /&gt;
|PG4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|196&lt;br /&gt;
|OFFSET-T2&lt;br /&gt;
|PG3&lt;br /&gt;
|194&lt;br /&gt;
|-&lt;br /&gt;
|DIR 1&lt;br /&gt;
|PE9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|137&lt;br /&gt;
|UC-BOOT&lt;br /&gt;
|PG5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|197&lt;br /&gt;
|OFFSET-T3&lt;br /&gt;
|PG8&lt;br /&gt;
|200&lt;br /&gt;
|-&lt;br /&gt;
|DIR 2&lt;br /&gt;
|PE10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|138&lt;br /&gt;
|ES-EN-12V&lt;br /&gt;
|PF0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|160&lt;br /&gt;
|STEPPER UART 2 TX&lt;br /&gt;
|PB0&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|DIR 3&lt;br /&gt;
|PE11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|139&lt;br /&gt;
|EN-HDMI-PWR&lt;br /&gt;
|PG9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|201&lt;br /&gt;
|STEPPER UART 2 RX&lt;br /&gt;
|PB1&lt;br /&gt;
|33&lt;br /&gt;
|-&lt;br /&gt;
|DIR 4&lt;br /&gt;
|PE12&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|140&lt;br /&gt;
|EN-THERMISTORS&lt;br /&gt;
|PF1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|161&lt;br /&gt;
|STEPPER UART 3 TX&lt;br /&gt;
|PD0&lt;br /&gt;
|96&lt;br /&gt;
|-&lt;br /&gt;
|DIR 5&lt;br /&gt;
|PE13&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|141&lt;br /&gt;
|EN-ENDSTOPS&lt;br /&gt;
|PF2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|162&lt;br /&gt;
|STEPPER UART 3 RX&lt;br /&gt;
|PD1&lt;br /&gt;
|97&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==STM32F031==&lt;br /&gt;
The STM32 is a Cortex M0 powered micro controller handling analog inputs and PWM outputs. It does not control any hard real time aspects of the print, that is handled by the AR100 core realized as a separate core in the A64 SoC. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number&lt;br /&gt;
!Name&lt;br /&gt;
!Bank and pin&lt;br /&gt;
!Number&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 0&lt;br /&gt;
|PA0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|6&lt;br /&gt;
|HEATER E0&lt;br /&gt;
|PA8&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|18&lt;br /&gt;
|FAN 0&lt;br /&gt;
|PB0&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 1&lt;br /&gt;
|PA1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|7&lt;br /&gt;
|HEATER E1&lt;br /&gt;
|PA9&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|19&lt;br /&gt;
|FAN 1&lt;br /&gt;
|PB1&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 2&lt;br /&gt;
|PA2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|8&lt;br /&gt;
|HEATER E2&lt;br /&gt;
|PA10&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|20&lt;br /&gt;
&lt;br /&gt;
|ES1-PWM-OUT&lt;br /&gt;
|PB3&lt;br /&gt;
|26&lt;br /&gt;
|-&lt;br /&gt;
|THERMISTOR 3&lt;br /&gt;
|PA3&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|9&lt;br /&gt;
|HEATER BED&lt;br /&gt;
|PA11&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|21&lt;br /&gt;
|FAN 3&lt;br /&gt;
|PB4&lt;br /&gt;
|27&lt;br /&gt;
|-&lt;br /&gt;
|BOARD VOLTAGE&lt;br /&gt;
|PA4&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|10&lt;br /&gt;
|USER LED&lt;br /&gt;
|PA12&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|22&lt;br /&gt;
|FAN 2&lt;br /&gt;
|PB5&lt;br /&gt;
|28&lt;br /&gt;
|-&lt;br /&gt;
|BOARD CURRENT&lt;br /&gt;
|PA5&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|PWM-ES2-OUT&lt;br /&gt;
|PB6&lt;br /&gt;
|29&lt;br /&gt;
|-&lt;br /&gt;
|BOARD TEMPERATURE&lt;br /&gt;
|PA6&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|12&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|EXT 1&lt;br /&gt;
|PB7&lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
|COLD JUNCTION&lt;br /&gt;
|PA7&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px;&amp;quot;|&lt;br /&gt;
|EXT 2&lt;br /&gt;
|PB8&lt;br /&gt;
|32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==DBG header==&lt;br /&gt;
This header is used for interacting with u-boot and getting early debug messages from the Linux kernel&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|NC&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MCU header==&lt;br /&gt;
This header is used for connecting additional MCU peripherals. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|PB7&lt;br /&gt;
|I2C1_SDA&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|PB8&lt;br /&gt;
|I2C1_SCL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|0.7-3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LEDs===&lt;br /&gt;
There are 15 white LEDs on the board. Here is what they mean&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Location&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|By PMIC&lt;br /&gt;
|Board powered&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|By heater BED &lt;br /&gt;
|BED output on&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|By fan 0&lt;br /&gt;
|Fan 0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|By fan 1&lt;br /&gt;
|Fan 1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D6&lt;br /&gt;
|By heater H2&lt;br /&gt;
|Heater H2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D7&lt;br /&gt;
|By fan 2&lt;br /&gt;
|Fan 2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D8&lt;br /&gt;
|By heater H0&lt;br /&gt;
|Heater H0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D9&lt;br /&gt;
|By fan 3&lt;br /&gt;
|Fan 3 is on&lt;br /&gt;
|-&lt;br /&gt;
|D10&lt;br /&gt;
|By heater H1&lt;br /&gt;
|Heater H1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D12&lt;br /&gt;
|By input connector&lt;br /&gt;
|High voltage domain is on&lt;br /&gt;
|-&lt;br /&gt;
|D15&lt;br /&gt;
|By eMMC chip&lt;br /&gt;
|eMMC activity&lt;br /&gt;
|-&lt;br /&gt;
|D17&lt;br /&gt;
|By HDMI connector&lt;br /&gt;
|USB activitiy&lt;br /&gt;
|-&lt;br /&gt;
|D18&lt;br /&gt;
|By the USB C connector&lt;br /&gt;
|Linux Heartbeat&lt;br /&gt;
|-&lt;br /&gt;
|D19&lt;br /&gt;
|By the A64 SoC&lt;br /&gt;
|CPU activity&lt;br /&gt;
|-&lt;br /&gt;
|D20&lt;br /&gt;
|By the STM32&lt;br /&gt;
|Klipper running on STM32&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are 3 push buttons on the board. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|FEL&lt;br /&gt;
|Enter FEL-mode of the A64&lt;br /&gt;
|-&lt;br /&gt;
|BOOT&lt;br /&gt;
|Boots or shuts down the board&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|Hard reset of the CPU&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Current limits==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name&lt;br /&gt;
!Limit&lt;br /&gt;
|-&lt;br /&gt;
|5V-ES&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|USB host each&lt;br /&gt;
|1.0 A&lt;br /&gt;
|-&lt;br /&gt;
|Thermistors&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|MCU connector&lt;br /&gt;
|0.5 A&lt;br /&gt;
|-&lt;br /&gt;
|Fan connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|Heater connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Wiring=&lt;br /&gt;
Below is a wiring diagram meant to aid in connecting motors, fans, extruders and hot ends to the control board. On the board, there is a small + sign next to output connectors where polarity is important. If passive heating elements are used, polarity is not important, but if those outputs are to be used with SSRs or relays, polarity must be observed. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore-wire-diagram-2.2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Network connection==&lt;br /&gt;
Recore is designed to be controlled through a browser on a computer, so the board must be connected to the local LAN or wifi network. Connect an ethernet cable between the board and a switch. The ping utility can be used to ensure that the board is discovered on the network.&lt;br /&gt;
&lt;br /&gt;
===LAN setup===&lt;br /&gt;
Recore with Refactor is running avahi and should announce itself on the network once a connection has been established. On a Linux based host computer, it is possible to search for a booted device using the following command: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ping recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the device is present, an SSH connection can be established:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Furthermore, a web interface running OctoPrint can be found using a browser:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
==Wifi setup==&lt;br /&gt;
Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the uSB dongle has been connected, and the board has been booted, access to the terminal command line can be given through a host computer. The board should appear as a TTY ACM device. On a Linux based host computer, the terminal program `screen` can be used to get access. From the host computer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
screen /dev/ttyACM0 115200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the host computer is running Windows, [https://www.putty.org/ Putty] can be used to get access. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established, the wifi network can be set up using the command nmtui. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nmtui&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Follow the instructions on screen to edit and activate the wifi connection. &lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered. See also known hardware issues at the [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|bottom of this page]]. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mating Connectors==&lt;br /&gt;
The power connectors on the board are available either in the web shop as part of a [https://www.iagent.no/product/connector-pack/ connector pack] or directly from Digi-key etc.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Connectors-all.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Four pin male: TBP01P1-508-04BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-04BE/10238369 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
Two pin male: TBP01P1-508-02BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-02BE/10238367 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
=Klipper Configuration=&lt;br /&gt;
There are no jumpers on Recore and no hard fuses. Everything is software configurable and resettable from software. This gives great power and flexibility without requiring physical access to the board once it has been installed. But with great power comes great responsibility. It is possible to break things if care is not taken during setup. There is one setting in particular that is worth mentioning: ES0 can have either +5V or +12V on the power pin. This is in order to allow a standard industrial inductive sensor to be used on that end stop. If a 5V only peripheral is connected, that could damage the connected peripheral. &lt;br /&gt;
&lt;br /&gt;
The default config file for Recore A6 can be found in the repository: [https://github.com/intelligent-agent/klipper/blob/master/config/generic-recore-a6.cfg generic-recore-a6.cfg]&lt;br /&gt;
&lt;br /&gt;
===TMC2209===&lt;br /&gt;
The 6 stepper drivers on Recore are of type TMC2209 from Trinamic. Each stepper has a configuration interface with a bidirectional UART port that is connected to a peripheral UART on the A64. The peripheral is not in use, but instead the GPIO bit-banging functionality of Klipper is used to communicate with the stepper drivers. &lt;br /&gt;
&lt;br /&gt;
Here is a table with pins and addresses for the steppers&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Stepper driver config&lt;br /&gt;
|-&lt;br /&gt;
|Name&lt;br /&gt;
|Pins&lt;br /&gt;
|Address&lt;br /&gt;
|-&lt;br /&gt;
|S0&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S1&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S2&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S3&lt;br /&gt;
|PB0/PB1&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|S4&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S5&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S6&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S7&lt;br /&gt;
|PD0/PD1&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External stepper drivers ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Ext-driver.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. &lt;br /&gt;
These can be connected using the headers S6 and S7.&lt;br /&gt;
&lt;br /&gt;
==Temperature inputs==&lt;br /&gt;
4 different temperature devices can be connected to the 4 analog inputs on Recore. Thermistor, Thermocouple, PT100 with INA826 and PT1000 without the use of a pre-amplifier.&lt;br /&gt;
===Thermistor===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermistor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the op-amp gain is set to 1.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermocouple.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure the pull-up is disabled and the op-amp gain is set to 100.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[recore]&lt;br /&gt;
...&lt;br /&gt;
gain_t0: 100&lt;br /&gt;
pullup_t0: 0&lt;br /&gt;
offset_t0: 1&lt;br /&gt;
&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: Type K&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PT100 with INA826===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT100.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to use a PT100 sensor, an external amplifier board must be used. There is an example configuration for Klipper that &lt;br /&gt;
uses this. The ADC reference voltage is 5.0 by default, but for Recore it is 3.3 V. Here is an example:  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT100 INA826&lt;br /&gt;
adc_voltage: 3.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pull-up must also be disabled.&lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT1000.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the gain is set to 1. In the latest version, the sensor must be prefixed with RECORE. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT1000&lt;br /&gt;
pullup_resistor: 4750&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Connecting other sensors=&lt;br /&gt;
The board has been designed to work with a range of 3rd party sensors for automating the print.&lt;br /&gt;
==BLtouch==&lt;br /&gt;
There are two versions of the BLtouch, the difference is the color of one of the GND wires. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Antclabs BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The Creality version has a blue GND wire. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Creality BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
There have been some cases of bad quality control for the Creality BLTouches, where the pinout on the sensor side have not matched the color coding in the photos/documentation. It might be good to make sure the color codes match up. For the Creality it should be, from left to right: &lt;br /&gt;
Blue, red, yellow, black, white. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When connected per wiring diagram above, setting up BLtouch can be done by adding the following section to printer.cfg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bltouch]&lt;br /&gt;
sensor_pin: ar100:PH6&lt;br /&gt;
control_pin: !PB3&lt;br /&gt;
speed:15&lt;br /&gt;
samples:1&lt;br /&gt;
pin_move_time: 0.675&lt;br /&gt;
sample_retract_dist: 10&lt;br /&gt;
probe_with_touch_mode: true&lt;br /&gt;
stow_on_each_sample: false&lt;br /&gt;
x_offset:29.2&lt;br /&gt;
y_offset:-34&lt;br /&gt;
z_offset:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inductive Sensor ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inductive sensor wiring 2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin. Inductive sensors often come with an industry standard voltage input of 6-36 V. For this reason there is a 12 V LDO (Low drop-out) voltage regulator integrated on the board. This voltage regulator can be output on the V+ pin of the connector marked ES0. If the Input to the board is 12 V, the LDO will supply a lower voltage, around 10.6 or so.&lt;br /&gt;
&lt;br /&gt;
==ADXL345==&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A popular accelerometer sensor for doing input shaping with Klipper is the ADXL345. This can be connected to the connectors S6/S7. There is no hardware SPI interface available, but a software implementation in Klipper exists. &lt;br /&gt;
Note: Only experimental support has been tested for this. &lt;br /&gt;
https://learn.adafruit.com/adxl345-digital-accelerometer&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: ar100:PL11&lt;br /&gt;
spi_software_sclk_pin: ar100:PL10&lt;br /&gt;
spi_software_mosi_pin: ar100:PE15&lt;br /&gt;
spi_software_miso_pin: ar100:PE14&lt;br /&gt;
rate: 400&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a Raspberry Pi Pico:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: pico:gpio17&lt;br /&gt;
spi_bus: spi0c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RC Servo==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:RC-servo.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Endstop 1 and 2 can be used as PWM outputs with 5V levels. Rev A6 is the first board with support for this. &lt;br /&gt;
More testing and configuration documentation is needed.&lt;br /&gt;
&lt;br /&gt;
==Filament runout sensor==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Filament-runout-sensor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Any of the 6 end stops can be used for connecting a filament runout sensor&lt;br /&gt;
&lt;br /&gt;
=Software for Recore=&lt;br /&gt;
Recore comes with the Linux distro Refactor (Armbian) pre-installed on the eMMC. &lt;br /&gt;
For more instructions about software for Recore, see the Refactor wiki page: &lt;br /&gt;
[[ Refactor#Recore ]]&lt;br /&gt;
&lt;br /&gt;
=== AR100 ===&lt;br /&gt;
Please see: [[AR100]]&lt;br /&gt;
&lt;br /&gt;
=== Manual control and testing ===&lt;br /&gt;
https://wiki.iagent.no/wiki/Manual_control_and_testing&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
==Start-up time==&lt;br /&gt;
With a maximum clock for MMC2 of 200 MHz, here is the start-up time: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore-3:~# systemd-analyze &lt;br /&gt;
Startup finished in 5.128s (kernel) + 11.567s (userspace) = 16.695s &lt;br /&gt;
graphical.target reached after 11.421s in userspace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measured voltages==&lt;br /&gt;
The final stages of Recore manufacturing consists of testing, calibration and flashing of firmware. &lt;br /&gt;
The calibration stage measures a number of voltages on the board and classifies the input stages gain and offset. &lt;br /&gt;
Instruments used: &lt;br /&gt;
* HP 3458A, 8.5 digit multimeter&lt;br /&gt;
* HP 3245A, Universal Source &lt;br /&gt;
&lt;br /&gt;
====Microcontroller voltages====&lt;br /&gt;
VDDA uC: 3.312 V&amp;lt;br&amp;gt;&lt;br /&gt;
VDD uC: 3.312 V&lt;br /&gt;
&lt;br /&gt;
Voltage from the PMIC supplied as bias:&amp;lt;br&amp;gt;&lt;br /&gt;
0.706 V &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====5V Buck converter ripple and noise ====&lt;br /&gt;
The 5V step down/Buck converter is a AOZ2151PQI-10. It can provide 4A and has an input voltage range of 12-28V. &lt;br /&gt;
It is hard wired to be in PWM mode. PFM mode results in a loud whine.&lt;br /&gt;
&lt;br /&gt;
Below is a screenshot of the ripple and noise across the  the 5V rail with a normal kernel running. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:VCC-5V-ripple-A4.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input stage===&lt;br /&gt;
An experiment with a constant current load drawing 20 A from the bed connector with and without a 92 mm fan on top of the board for forced convection. The temperature measured was with the on board thermistor. Using a thermal camera, the temperature displayed matches well with the temperature reported by the camera. However, in Rev A2, this is not the hottest point on the board. The MOSFET controlling the bed seems to consistently get the highest temperature. The reason for this is probably due to a 3.3 V VGS. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File: Temperature-fan-off.pdf.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Temperature-fan.pdf.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Inrush current====&lt;br /&gt;
During turn on of the high power stage, there will be an inrush current to charge up the bank of capacitors present on the board. &lt;br /&gt;
If no loads are turned on, the inrush current reaches 48 A at peak. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A6 when the input is enabled. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inrush-curent-A6-6-steppers.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. &lt;br /&gt;
# The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. &lt;br /&gt;
# The current limit set in Klipper monitors the continuous current draw. This is now set at 20 A, but can go up to 30 A and still be within the limits of the connectors and input stage mosfets. &lt;br /&gt;
# The over temperature protection monitors the temperature in the input stage and cuts the power if the temperature goes over 110 degrees. The board should not be kept at this temperature for a prolonged period, but during heated bed heat-up, it can be elevated compared to the rest of the print.&lt;br /&gt;
&lt;br /&gt;
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Over-current-short-circuit-50A.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ADC offset and gain measurements===&lt;br /&gt;
To measure the ADC offset error, measure the voltage on the uC input pin and record when the &lt;br /&gt;
transition from 0 to 1 occurs. It should occur at 0.5 LSB = 3.3/4096/2 = 0.4028 mV. &lt;br /&gt;
Offset: 55.35 mV - 0.4028 mV = 54.95 mV&lt;br /&gt;
&lt;br /&gt;
==Temperature calibration==&lt;br /&gt;
A set of experiments have been carried out to calibrate the different sensors using a dry-well calibrator. &lt;br /&gt;
The reference probe was a Sensing Devices SDL385 PRT. &lt;br /&gt;
The levels of calibration was: room temperature, 50, 100, 150, and 200 degrees C.&lt;br /&gt;
&lt;br /&gt;
===Thermistor===&lt;br /&gt;
The thermistor in use was a standard EPCOS 100K B57560G104F. This thermistor has a resistance tolerance of 2 %. The value of the pull-up resistor as measured during calibration was 4740.17501. This value seemed to work well at all levels of calibration, although a little on the high side compared to the reference. &lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
The PT1000 in use was a Heraeus 31500989 [https://www.heraeus.com/media/media/hne/datasheets/sensor_assemblies_1/Heraeus_W-EYK_Sensor_E.pdf] works well. The tolerance class given in the datasheet is &amp;quot;F 0.10 / Class 1/3 B&amp;quot;. There are two different tolerances here: F0.10 and one third of Class B. The accuracy looks good at all temperatures, perhaps a bit on the high side if using the calibrated value for the pull-up. During the testing, 10 ohm was subtracted from the calibrated value.&lt;br /&gt;
&lt;br /&gt;
===PT100===&lt;br /&gt;
The PT100 used in the calibration was the E3D PT100 with the INA826 amplifier board. There is no datasheet available for the PT100 sensor and no mention of what tolerance there is on the reference resistors used. Furthermore Klipper expects the reference voltage to be 5V exactly, and there is no way to supply a measured value. Measurements on Recore has shown that the value is often a bit lower due to the PMIC for the 5V output on the &amp;quot;input&amp;quot; ports. 4.979 V has been measured and is likely an expected value.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
Using the calibration values directly will give a slight offset to the thermocouple measurements. &lt;br /&gt;
The gain and ADC voltage can be used as measured during calibration. It should be in the region of 101 for gain and 3.307 for ADC voltage. As for the offset, that can be increased slightly to compensate for the cold junction temperature difference. For instance, the measured offset for the test board was 0.0032960, but a value of 0.00340 fit the data points well. The measurements were done on T2, so it it possible that the distance from the cold junction caused the offset. The cold junction thermistor is located between T0 and T1.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
====Where can I ask for help?====&lt;br /&gt;
:You can join the Discord: https://discord.gg/bCnp9H5SB5&lt;br /&gt;
====What comes in the box with the Recore? Specifically, terminal connectors for power, etc?====&lt;br /&gt;
:It's only the board, no cables or connectors. There is a bag of connectors available to purchase in the web shop.&lt;br /&gt;
====Do I need access to those 3 buttons on the board?====&lt;br /&gt;
:It is not necessary to have access to the three buttons for normal use.&lt;br /&gt;
====What's the maximum current draw for heat bed?====&lt;br /&gt;
:This has been tested up to 20 A&lt;br /&gt;
====Why are there unused and unbroken out pins on the STM32 MCU?====&lt;br /&gt;
:The pins that are needed from the MCU have been routed out plus two pins available on an external header.&lt;br /&gt;
====I have a gadget that I want to connect with SPI. Is that possible?====&lt;br /&gt;
:There are 6 pins available from the main SoC that can be used for various things.There is no hardware SPI, but you can make a program that uses soft SPI. There is no dedicated I2C, but perhaps that would be a nice addition.&lt;br /&gt;
&lt;br /&gt;
====What exactly is the role of the AR100 device?====&lt;br /&gt;
:The AR100 handles the fast real-time aspects, mainly the stepper motors and end stops.&lt;br /&gt;
&lt;br /&gt;
====What voltage fans are supported?====&lt;br /&gt;
:The same voltage as the input voltage, either 12 V or 24 V. You can experiment with PWM for running lower voltage fans on 24 V input.&lt;br /&gt;
====Where is the board layout file?====&lt;br /&gt;
:The Layout file will not be available. It is an &amp;quot;open schematic&amp;quot; board, not open source hardware&lt;br /&gt;
====Where are you shipping from?====&lt;br /&gt;
:Boards are shipping from Norway. Eventually shipping will be from a warehouse in the US&lt;br /&gt;
&lt;br /&gt;
= Known hardware issues for rev A6=&lt;br /&gt;
===T1 offset is not consistent===&lt;br /&gt;
:On Rev A6, during calibration it has been discovered that the offset on T1 is often varying around the predetermined set point of 0.33 V. It seems the cause of this is the batch of op-amps used, so it is a hardware issue. The good news is that it seems to be OK to use the values from the calibration document. The gain should be about the same (101). &lt;br /&gt;
&lt;br /&gt;
===Board can not handle 24 V input (fixed)===&lt;br /&gt;
[[File:Connector with capacitor.jpg|thumb|Connector with capacitor]]&lt;br /&gt;
[[File:Board with capacitor.jpg|thumb|Board with capacitor]]&lt;br /&gt;
:The design without alterations can not handle 24 V input. A bare board can only handle about 20 V. A workaround is to add an electrolytic capacitor to the input. This can either be soldered on to the step down converter input MLCC capacitors, or it can be screwed directly on to the input connector. Be aware of the polarity of the capacitor when mounting it. The &amp;quot;minus&amp;quot; should be towards the black wire. The recommended value is a 47 uF capacitor with a voltage rating of 35 V or higher. 33 uF has also been tested and working. 100 uF and higher should also work, but has not been tested specifically.&lt;br /&gt;
&lt;br /&gt;
:The capacitor that will be added to remaining boards from the Rev A6 batch is ESH476M035AE3AA from Kemet: https://www.digikey.com/en/products/detail/kemet/ESH476M035AE3AA/2712504&lt;br /&gt;
&lt;br /&gt;
:It seems the reason for the issue is a combination of long wires with high inductance, too low capacitance on the input of the board and too little headroom on the step down converter. This can cause voltage spikes that makes the input voltage go above the rated input voltage during load changes. Adding a capacitor to the input &amp;quot;buffers&amp;quot; or &amp;quot;decouples&amp;quot; the long inductance wires and limits the voltage spikes.&lt;br /&gt;
&lt;br /&gt;
===USB connectors not discovered when powered by USB device (workaround)===&lt;br /&gt;
:Some boards are not initialized right when powered by only the USB port. The reason for this is that the VBUS/over current input on the USB hub can get an ambiguous value from USB connector 2 and 3 (the two USB host connectors close to the ethernet connector). &lt;br /&gt;
:A workaround is to apply power to the VIN (12-24V) connector first. If FEL-mode is necessary, that button must be pressed as power is applied from the VIN connector. After that the USB connector can be inserted.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Remove_A1&amp;diff=1047</id>
		<title>Remove A1</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Remove_A1&amp;diff=1047"/>
		<updated>2024-01-09T15:03:37Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Remove is an accelerometer for doing input shaping with Klipper.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Remove A0 iso.jpg|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pinout diagram ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Remove pinout.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klipper configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# The Remove resonance tester mcu&lt;br /&gt;
[mcu rp2040]&lt;br /&gt;
serial: /dev/ttyACM0&lt;br /&gt;
baud: 1500000&lt;br /&gt;
&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: rp2040:gpio5&lt;br /&gt;
spi_bus: spi0a&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
[static_digital_output remove_leds]&lt;br /&gt;
pins: rp2040:gpio17, rp2040:gpio18&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Klipper usage ===&lt;br /&gt;
&lt;br /&gt;
At this time there is an issue with the A1 board where the initialization can fail in Klipper.&lt;br /&gt;
&lt;br /&gt;
If you follow the klipper documentation and run the expected commands you may get the following error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Invalid adxl345 id (got f2 vs e5).&lt;br /&gt;
This is generally indicative of connection problems&lt;br /&gt;
(e.g. faulty wiring) or a faulty adxl345 chip.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does '''not''' mean your Remove is faulty. Try running the command again, it is a known initialization error, and will go away once the initial message happens. It will happen again next time you restart klipper though, as it re-initializes the ADXL345 again.&lt;br /&gt;
&lt;br /&gt;
=== Klipper firmware compilation ===&lt;br /&gt;
The unit comes with firmware pre-installed. If you want to upgrade the firmware, these are the steps to reproduce. &lt;br /&gt;
This can be done directly from Recore, or from a regular computer. If the device ID doesn't match, the board is not in DFU mode, and needs to be manually started that way. Use a paperclip or some wire, unplug the USB of the device, short the two round pads on the back of the PCB and plug in the USB. At that point the RP2040 will be in DFU mode, allowing it to be flashed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp test/configs/rp2040.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make&lt;br /&gt;
make flash FLASH_DEVICE=&amp;quot;2e8a:0003&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Recore_A7&amp;diff=985</id>
		<title>Recore A7</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Recore_A7&amp;diff=985"/>
		<updated>2023-09-09T19:26:55Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Neopixels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint. The main features are: &lt;br /&gt;
* Allwinner A64 SoC, quad core CPU running at 1 GHz. &lt;br /&gt;
* 1 GB of DDR3 RAM&lt;br /&gt;
* 8 GB of on board eMMC &lt;br /&gt;
* Gigabit Ethernet&lt;br /&gt;
* 6 TMC2209, 2 A stepper motor drivers&lt;br /&gt;
* 3 heater outputs + high power heated bed&lt;br /&gt;
* 4 USB High Speed ports &lt;br /&gt;
* 4 thermistor/thermocouple inputs (software selectable)&lt;br /&gt;
* Comes with Debian Linux with Klipper and OctoPrint or MainSail installed&lt;br /&gt;
&lt;br /&gt;
This document is for Recore Revision A7. For previous hardware revisions, please see:  &lt;br /&gt;
* [[Recore_A6]]&lt;br /&gt;
* [[Recore_A5]]&lt;br /&gt;
* [[Recore_A4]]&lt;br /&gt;
* [[Recore_A3]]  &lt;br /&gt;
* [[Recore_A2]]&lt;br /&gt;
&lt;br /&gt;
==Availability==&lt;br /&gt;
Recore A7 can be purchased from the Intelligent Agent web shop [https://www.iagent.no/product/recore/ https://www.iagent.no/product/recore/]&lt;br /&gt;
==Schematics==&lt;br /&gt;
Recore is &amp;quot;open schematic&amp;quot;, it is available here: [https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A7.pdf https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A7.pdf]&lt;br /&gt;
==3D model==&lt;br /&gt;
A STEP file of the PCB with components is available here: [https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A7.step https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A7.step]&lt;br /&gt;
&lt;br /&gt;
=Pinout=&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore A7 pinout.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==A64==&lt;br /&gt;
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) clocked at 300 MHz that handles the real time aspect for the 3D-printer. In the following table the pins used for End-stops and stepper control are described. &lt;br /&gt;
The &amp;quot;bank and pin&amp;quot; can be used to specify the pin numbers in klipper. &lt;br /&gt;
The &amp;quot;Number&amp;quot; column is useful for testing things on the command line in conjunction with gpiod.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !! Number&lt;br /&gt;
|-&lt;br /&gt;
| STEP 0 || PL4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 4 || END STOP 0 || PH4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;|228 || OC-ALERT || PF6 || 166&lt;br /&gt;
|-&lt;br /&gt;
| STEP 1 || PL5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 5 || END STOP 1 || PH5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 229 || OC-RESET || PF4 || 164&lt;br /&gt;
|-&lt;br /&gt;
| STEP 2 || PL6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 6 || END STOP 2 || PH6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 230 || EN-HP || PF5 || 165&lt;br /&gt;
|-&lt;br /&gt;
| STEP 3 || PL7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 7 || END STOP 3 || PH7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 231 || UC-INT-1 || PG3 || 195&lt;br /&gt;
|-&lt;br /&gt;
| STEP 4 || PL8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 8 || END STOP 4 || PH8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 232 || UC-NRST || PG4 || 196&lt;br /&gt;
|-&lt;br /&gt;
| STEP 5 || PL9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || END STOP 5 || PH9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 233 || UC-BOOT || PG5 || 197&lt;br /&gt;
|-&lt;br /&gt;
| STEP 6 || PL10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 10 || GAIN-ENABLE-T0 || PD4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 100 || ES-EN-12V || PF0 || 160&lt;br /&gt;
|-&lt;br /&gt;
| STEP 7 || PL11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 11 || GAIN-ENABLE-T1 || PH11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 235 || EN-THERMISTORS || PF1 || 161&lt;br /&gt;
|-&lt;br /&gt;
| DIR 0 || PE8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 136 || GAIN ENABLE T2 || PE17 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 145 || EN-ENDSTOPS || PF2 || 162&lt;br /&gt;
|-&lt;br /&gt;
| DIR 1 || PE9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 137 || GAIN ENABLE T3 || PB2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 34 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 2 || PE10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 138 || PU-ENABLE-T0 || PG10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 202 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 3 || PE11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 139 || PU-ENABLE-T1 || PG11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 203 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 4 || PE12 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 140 || PU ENABLE T2 || PG12 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 204 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 5 || PE13 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 141 || PU ENABLE T3 || PG13 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 205 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 6 || PE14 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 142 || OFFSET-T0 || PG0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 192 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| DIR 7 || PE15 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 143 || OFFSET-T1 || PG1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 193 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 0 || PE0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 128 || OFFSET-T2 || PG3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 194 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 1 || PE1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 129 || OFFSET-T3 || PG8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 200 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 2 || PE2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 130 || STEPPER UART 0-3 || PE16 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 144 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 3 || PE3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 131 || STEPPER UART 4-5 || PD24 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 120 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 4 || PE4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 132 || STEPPER UART 6 || PD2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 98 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 5 || PE5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 133 || STEPPER UART 7 || PD3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 99 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 6 || PD0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 96 ||  ||  ||style=&amp;quot;border-right:solid 2px;&amp;quot;|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| STEP DIAG 7 || PD1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 97 ||  ||  ||style=&amp;quot;border-right:solid 2px;&amp;quot;|  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==STM32F031==&lt;br /&gt;
The STM32 is a Cortex M0 powered micro controller handling analog inputs and PWM outputs. It does not control any hard real time aspects of the print, that is handled by the AR100 core realized as a separate core in the A64 SoC. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !!style=&amp;quot;border-right:solid 2px;&amp;quot;| Number !! Name !! Bank and pin !! Number&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E0 || PA8 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 18 || THERMISTOR 0 || PA0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 6 || ES1-PWM-OUT || PB3 || 26&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E1 || PA9 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 19 || THERMISTOR 1 || PA1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 7 || PWM-ES2-OUT || PB6 || 29&lt;br /&gt;
|-&lt;br /&gt;
| HEATER E2 || PA10 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 20 || THERMISTOR 2 || PA2 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 8 || EXT 1 || PB7 || 30&lt;br /&gt;
|-&lt;br /&gt;
| HEATER BED || PA11 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 21 || THERMISTOR 3 || PA3 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 9 || EXT 2 || PB8 || 32&lt;br /&gt;
|-&lt;br /&gt;
| FAN 0 || PF0 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 2 || BOARD VOLTAGE || PA4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 10 || EXT 3 || PA13 || 23&lt;br /&gt;
|-&lt;br /&gt;
| FAN 1 || PB1 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 15 || BOARD CURRENT || PA5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 11 || EXT 4 || PB2 || 16&lt;br /&gt;
|-&lt;br /&gt;
| FAN 3 || PB4 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 27 || BOARD TEMPERATURE || PA6 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 12 || USER LED || PA12 || 22&lt;br /&gt;
|-&lt;br /&gt;
| FAN 2 || PB5 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 28 || COLD JUNCTION || PA7 ||style=&amp;quot;border-right:solid 2px;&amp;quot;| 13 || FAN_CURRENT || PB0 || 14&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==DBG header==&lt;br /&gt;
The debug header has UART 0 layed out on some of the pins and is used for interacting with u-boot and getting early debug messages from the Linux kernel. It also has a the option to connect a &amp;quot;boot&amp;quot; button so the board can be safely started and shut down from the 3D-printers front panel. The USR pin can be used to light up a an LED or some other custom function. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|BOOT&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|USR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MCU header==&lt;br /&gt;
The MCU header is used for connecting external peripherals to the STM32F031 micro controller on the board. There are 4 pins in total available to use. In addition, there is a ground pin and a 3.3 V pin available. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|PB7&lt;br /&gt;
|I2C1_SDA&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|PB8&lt;br /&gt;
|I2C1_SCL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|3.3V&lt;br /&gt;
|0.7-3.3V&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|PA13&lt;br /&gt;
|EXTI 13&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|PB2&lt;br /&gt;
|EXTI 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SPI on S6 and S7 headers==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
!Alt&lt;br /&gt;
|-&lt;br /&gt;
|S6-3&lt;br /&gt;
|PD0&lt;br /&gt;
|SPI1_CS&lt;br /&gt;
|-&lt;br /&gt;
|S6-5&lt;br /&gt;
|PD1&lt;br /&gt;
|SPI1_CLK&lt;br /&gt;
|-&lt;br /&gt;
|S7-3&lt;br /&gt;
|PD2&lt;br /&gt;
|SPI1_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|S7-5&lt;br /&gt;
|PD3&lt;br /&gt;
|SPI1_MISO&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LEDs===&lt;br /&gt;
There are 15 white LEDs on the board. Here is what they mean&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Location&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|By PMIC&lt;br /&gt;
|Board powered&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|By heater BED &lt;br /&gt;
|BED output on&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|By fan 0&lt;br /&gt;
|Fan 0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|By fan 1&lt;br /&gt;
|Fan 1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D6&lt;br /&gt;
|By heater H2&lt;br /&gt;
|Heater H2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D7&lt;br /&gt;
|By fan 2&lt;br /&gt;
|Fan 2 is on&lt;br /&gt;
|-&lt;br /&gt;
|D8&lt;br /&gt;
|By heater H0&lt;br /&gt;
|Heater H0 is on&lt;br /&gt;
|-&lt;br /&gt;
|D9&lt;br /&gt;
|By fan 3&lt;br /&gt;
|Fan 3 is on&lt;br /&gt;
|-&lt;br /&gt;
|D10&lt;br /&gt;
|By heater H1&lt;br /&gt;
|Heater H1 is on&lt;br /&gt;
|-&lt;br /&gt;
|D12&lt;br /&gt;
|By input connector&lt;br /&gt;
|High voltage domain is on&lt;br /&gt;
|-&lt;br /&gt;
|D15&lt;br /&gt;
|By eMMC chip&lt;br /&gt;
|eMMC activity&lt;br /&gt;
|-&lt;br /&gt;
|D17&lt;br /&gt;
|By USB hub chip&lt;br /&gt;
|USB activitiy&lt;br /&gt;
|-&lt;br /&gt;
|D18&lt;br /&gt;
|By the USB C connector&lt;br /&gt;
|Linux Heartbeat&lt;br /&gt;
|-&lt;br /&gt;
|D19&lt;br /&gt;
|By the A64 SoC&lt;br /&gt;
|CPU activity&lt;br /&gt;
|-&lt;br /&gt;
|D20&lt;br /&gt;
|By the STM32&lt;br /&gt;
|Klipper running on STM32&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are 3 push buttons on the board. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|FEL&lt;br /&gt;
|Enter FEL-mode of the A64&lt;br /&gt;
|-&lt;br /&gt;
|BOOT&lt;br /&gt;
|Boots or shuts down the board&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|Hard reset of the CPU&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Current limits==&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The amount of current that can be drawn on the two USB host connectors closest to the HDMI connector is not according to spec. The combined current draw for USB 1 and 2 should not exceed 0.4 A. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name&lt;br /&gt;
!Limit&lt;br /&gt;
|-&lt;br /&gt;
|5V-ES&lt;br /&gt;
|0.4 A&lt;br /&gt;
|-&lt;br /&gt;
|USB host each&lt;br /&gt;
|1.0 A&lt;br /&gt;
|-&lt;br /&gt;
|Thermistors&lt;br /&gt;
|0.75 A&lt;br /&gt;
|-&lt;br /&gt;
|MCU connector&lt;br /&gt;
|0.5 A&lt;br /&gt;
|-&lt;br /&gt;
|Fan connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|Heater connectors&lt;br /&gt;
|programmable&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Wiring=&lt;br /&gt;
Below is a wiring diagram meant to aid in connecting motors, fans, extruders and hot ends to the control board. On the board, there is a small + sign next to output connectors where polarity is important. If passive heating elements are used, polarity is not important, but if those outputs are to be used with SSRs or relays, polarity must be observed. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Recore-wire-diagram-3.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Network connection==&lt;br /&gt;
Recore is designed to be controlled through a browser on a computer, so the board must be connected to the local LAN or wifi network. Connect an ethernet cable between the board and a switch. The ping utility can be used to ensure that the board is discovered on the network.&lt;br /&gt;
&lt;br /&gt;
===LAN setup===&lt;br /&gt;
Recore with Refactor is running avahi and should announce itself on the network once a connection has been established. On a Linux based host computer, it is possible to search for a booted device using the following command: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ping recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the device is present, an SSH connection can be established:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@recore.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Furthermore, a web interface running OctoPrint can be found using a browser:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
==Wifi setup==&lt;br /&gt;
Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the uSB dongle has been connected, and the board has been booted, access to the terminal command line can be given through a host computer. The board should appear as a TTY ACM device. On a Linux based host computer, the terminal program `screen` can be used to get access. From the host computer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
screen /dev/ttyACM0 115200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the host computer is running Windows, [https://www.putty.org/ Putty] can be used to get access. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established, the wifi network can be set up using the command nmtui. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nmtui&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Follow the instructions on screen to edit and activate the wifi connection. &lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mating Connectors==&lt;br /&gt;
The power connectors on the board are available either in the web shop as part of a [https://www.iagent.no/product/connector-pack/ connector pack] or directly from Digi-key etc.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Connectors-all.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Four pin male: TBP01P1-508-04BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-04BE/10238369 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
Two pin male: TBP01P1-508-02BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-02BE/10238367 | Digi-key]]&lt;br /&gt;
&lt;br /&gt;
=Klipper Configuration=&lt;br /&gt;
There are no jumpers on Recore and no hard fuses. Everything is software configurable and resettable from software. This gives great power and flexibility without requiring physical access to the board once it has been installed. But with great power comes great responsibility. It is possible to break things if care is not taken during setup. There is one setting in particular that is worth mentioning: ES0 can have either +5V or +12V on the power pin. This is in order to allow a standard industrial inductive sensor to be used on that end stop. If a 5V only peripheral is connected, that could damage the connected peripheral. &lt;br /&gt;
&lt;br /&gt;
The default config file for Recore A6 can be found in the repository: [https://github.com/intelligent-agent/klipper/blob/master/config/generic-recore-a7.cfg generic-recore-a7.cfg]&lt;br /&gt;
&lt;br /&gt;
===TMC2209===&lt;br /&gt;
The 6 stepper drivers on Recore are of type TMC2209 from Trinamic. Each stepper has a configuration interface with a bidirectional UART port that is connected to a pin on the A64. The GPIO bit-banging functionality of Klipper is used to communicate with the stepper drivers. &lt;br /&gt;
&lt;br /&gt;
Here is a table with pins and addresses for the steppers&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Stepper driver config&lt;br /&gt;
|-&lt;br /&gt;
|Name&lt;br /&gt;
|Pins&lt;br /&gt;
|Address&lt;br /&gt;
|-&lt;br /&gt;
|S0&lt;br /&gt;
|PE16&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S1&lt;br /&gt;
|PE16&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S2&lt;br /&gt;
|PE16&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|S3&lt;br /&gt;
|PE16&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|S4&lt;br /&gt;
|PD24&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|S5&lt;br /&gt;
|PD24&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|S6&lt;br /&gt;
|PD2&lt;br /&gt;
|0-3&lt;br /&gt;
|-&lt;br /&gt;
|S7&lt;br /&gt;
|PD3&lt;br /&gt;
|0-3&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External stepper drivers ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Ext-driver.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. &lt;br /&gt;
These can be connected using the headers S6 and S7.&lt;br /&gt;
&lt;br /&gt;
==Temperature inputs==&lt;br /&gt;
4 different temperature devices can be connected to the 4 analog inputs on Recore. Thermistor, Thermocouple, PT100 with INA826 and PT1000 without the use of a pre-amplifier.&lt;br /&gt;
===Thermistor===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermistor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the op-amp gain is set to 1.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Thermocouple.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure the pull-up is disabled and the op-amp gain is set to 100.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[recore]&lt;br /&gt;
...&lt;br /&gt;
gain_t0: 100&lt;br /&gt;
pullup_t0: 0&lt;br /&gt;
offset_t0: 1&lt;br /&gt;
&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: Type K&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PT100 with INA826===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT100.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to use a PT100 sensor, an external amplifier board must be used. There is an example configuration for Klipper that &lt;br /&gt;
uses this. The ADC reference voltage is 5.0 by default, but for Recore it is 3.3 V. Here is an example:  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT100 INA826&lt;br /&gt;
adc_voltage: 3.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pull-up must also be disabled.&lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:PT1000.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Make sure the pull-up is enabled and the gain is set to 1. In the latest version, the sensor must be prefixed with RECORE. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Extruder]&lt;br /&gt;
...&lt;br /&gt;
sensor_type: PT1000&lt;br /&gt;
pullup_resistor: 4750&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Connecting other sensors=&lt;br /&gt;
The board has been designed to work with a range of 3rd party sensors for automating the print.&lt;br /&gt;
==BLtouch==&lt;br /&gt;
There are two versions of the BLtouch, the difference is the color of one of the GND wires. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Antclabs BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The Creality version has a blue GND wire. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Creality BLtouch sensor wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
There have been some cases of bad quality control for the Creality BLTouches, where the pinout on the sensor side have not matched the color coding in the photos/documentation. It might be good to make sure the color codes match up. For the Creality it should be, from left to right: &lt;br /&gt;
Blue, red, yellow, black, white. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When connected per wiring diagram above, setting up BLtouch can be done by adding the following section to printer.cfg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bltouch]&lt;br /&gt;
sensor_pin: ar100:PH6&lt;br /&gt;
control_pin: !PB3&lt;br /&gt;
speed:15&lt;br /&gt;
samples:1&lt;br /&gt;
pin_move_time: 0.675&lt;br /&gt;
sample_retract_dist: 10&lt;br /&gt;
probe_with_touch_mode: true&lt;br /&gt;
stow_on_each_sample: false&lt;br /&gt;
x_offset:29.2&lt;br /&gt;
y_offset:-34&lt;br /&gt;
z_offset:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inductive Sensor ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Inductive sensor wiring 2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin. Inductive sensors often come with an industry standard voltage input of 6-36 V. For this reason there is a 12 V LDO (Low drop-out) voltage regulator integrated on the board. This voltage regulator can be output on the V+ pin of the connector marked ES0. If the Input to the board is 12 V, the LDO will supply a lower voltage, around 10.6 or so.&lt;br /&gt;
&lt;br /&gt;
==ADXL345==&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt; &lt;br /&gt;
[[File:Wiring.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A popular accelerometer sensor for doing input shaping with Klipper is the ADXL345. This can be connected to the connectors S6/S7. There is no hardware SPI interface available, but a software implementation in Klipper exists. &lt;br /&gt;
Note: Only experimental support has been tested for this. &lt;br /&gt;
https://learn.adafruit.com/adxl345-digital-accelerometer&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: ar100:PL11&lt;br /&gt;
spi_software_sclk_pin: ar100:PL10&lt;br /&gt;
spi_software_mosi_pin: ar100:PE15&lt;br /&gt;
spi_software_miso_pin: ar100:PE14&lt;br /&gt;
rate: 400&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a Raspberry Pi Pico:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: pico:gpio17&lt;br /&gt;
spi_bus: spi0c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Neopixels ==&lt;br /&gt;
To use neopixels, the STM32F031 chip onboard needs to have the bitbanging SPI support compiled in. To do so, follow the steps below to recompile and flash the stm32 chip. '''Make sure you're not printing while doing any of these!'''&lt;br /&gt;
# Edit /home/debian/klipper/src/stm32/Kconfig: change the line that reads &amp;lt;pre&amp;gt;default 0x4000 if MACH_STM32F031&amp;lt;/pre&amp;gt; to &amp;lt;pre&amp;gt;default 0x8000 if MACH_STM32F031&amp;lt;/pre&amp;gt; This is because the STM32F031 used on the A7 board has double the amount of memory as the one used on A6 boards, and you need this extra space for additional features used by Klipper.&lt;br /&gt;
# Run ''make menuconfig'' from the /home/klipper directory. Set the options according to those listed [[Refactor#STM32_firmware|here]], except you want to add ''Support for GPIO &amp;quot;bit-banging&amp;quot; devices'' under the ''Optional features'' menu.&lt;br /&gt;
# Run ''make clean''&lt;br /&gt;
# Run ''make -j''&lt;br /&gt;
# Run ''cp out/klipper.bin /opt/firmware/stm32.bin''&lt;br /&gt;
# Run ''systemctl stop klipper sudo flash-stm32''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use endstop ES1 (PB3) or ES2 (PB6). Make sure to use a 100 ohm pull-up from pin S (pin 2) to pin 5V (pin 3) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neopixel my_neopixel]&lt;br /&gt;
pin: PB3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RC Servo==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:RC-servo.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Endstop 1 and 2 can be used as PWM outputs with 5V levels. Rev A6 is the first board with support for this. &lt;br /&gt;
More testing and configuration documentation is needed.&lt;br /&gt;
&lt;br /&gt;
==Filament runout sensor==&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-res&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Filament-runout-sensor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Any of the 6 end stops can be used for connecting a filament runout sensor&lt;br /&gt;
&lt;br /&gt;
=Software for Recore=&lt;br /&gt;
Recore comes with the Linux distro Refactor (Armbian) pre-installed on the eMMC. &lt;br /&gt;
For more instructions about software for Recore, see the Refactor wiki page: &lt;br /&gt;
[[ Refactor ]]&lt;br /&gt;
&lt;br /&gt;
=== AR100 ===&lt;br /&gt;
Please see: [[AR100]]&lt;br /&gt;
&lt;br /&gt;
=== Manual control and testing ===&lt;br /&gt;
https://wiki.iagent.no/wiki/Manual_control_and_testing&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
===Start-up time===&lt;br /&gt;
With a maximum clock for MMC2 of 200 MHz, here is the start-up time: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# systemd-analyze&lt;br /&gt;
Startup finished in 3.011s (kernel) + 12.292s (userspace) = 15.303s &lt;br /&gt;
graphical.target reached after 11.934s in userspace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===eMMC read and write speed===&lt;br /&gt;
eMMC write speed: 25.3 MB/s&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/dev/random of=/random.bin bs=1M count=1000&lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 41.5008 s, 25.3 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eMMC read speed: 106 MB/s&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@recore:~# dd if=/random.bin of=/dev/null                                                             &lt;br /&gt;
1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.86672 s, 106 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measured voltages==&lt;br /&gt;
The final stages of Recore manufacturing consists of testing, calibration and flashing of firmware. &lt;br /&gt;
The calibration stage measures a number of voltages on the board and classifies the input stages gain and offset. &lt;br /&gt;
Instruments used: &lt;br /&gt;
* HP 3458A, 8.5 digit multimeter&lt;br /&gt;
* HP 3245A, Universal Source &lt;br /&gt;
&lt;br /&gt;
====Microcontroller voltages====&lt;br /&gt;
VDDA uC: 3.312 V&amp;lt;br&amp;gt;&lt;br /&gt;
VDD uC: 3.312 V&lt;br /&gt;
&lt;br /&gt;
Voltage from the PMIC supplied as bias:&amp;lt;br&amp;gt;&lt;br /&gt;
0.706 V &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====5V Buck converter ripple and noise ====&lt;br /&gt;
The 5V step down/Buck converter is a AOZ2151EQI-30. It can provide 4A and has an input voltage range of 12-28V. &lt;br /&gt;
It is hard wired to be in PWM mode. PFM mode results in a loud whine.&lt;br /&gt;
&lt;br /&gt;
Below is a screenshot of the ripple and noise across the  the 5V rail with a normal kernel running. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:5V ripple A7.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input stage===&lt;br /&gt;
When drawing a constant current of 20 A from the bed connector with and without any forced convection. The temperature measured was with the on board thermistor. Using a thermal camera, the temperature displayed matches well with the temperature reported by the camera. The maximum board temperature of 100 degrees C is reached after about 10 minutes with no forced convection. &lt;br /&gt;
Ambient temperature in the room: 20.1 degrees C.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Input stage temperature no fan.png|A7 Input stage temperature no fan]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With forced convection (a 92 mm Noctua fan) and a current load of 29 A, the maximum temperature reached after 10 minutes was 87.7 degrees C as measured by the on board thermistor. The thermal camera showed a higher temperature of 98 degrees. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Input stage temperature with fan crop.png|Input stage temperature with fan]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maximum input voltage ====&lt;br /&gt;
Using 1.5 m test leads and a 26 V bench top PSU (Agilent U8002A) a board has been tested for over voltage issues. This was a problem with Rev A6. No issues were found during testing. &lt;br /&gt;
&lt;br /&gt;
====Inrush current====&lt;br /&gt;
During turn on of the high power stage, there will be an inrush current to charge up the bank of capacitors present on the board. &lt;br /&gt;
If no loads are turned on, the inrush current reaches 48 A at peak. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A6 when the input is enabled. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:A7_inrush_current.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. &lt;br /&gt;
# The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. &lt;br /&gt;
# The current limit set in Klipper monitors the continuous current draw. This is now set at 20 A, but can go up to 30 A and still be within the limits of the connectors and input stage mosfets. &lt;br /&gt;
# The over temperature protection monitors the temperature in the input stage and cuts the power if the temperature goes over 110 degrees. The board should not be kept at this temperature for a prolonged period, but during heated bed heat-up, it can be elevated compared to the rest of the print.&lt;br /&gt;
&lt;br /&gt;
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Over-current-short-circuit-50A.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ADC offset and gain measurements===&lt;br /&gt;
To measure the ADC offset error, measure the voltage on the uC input pin and record when the &lt;br /&gt;
transition from 0 to 1 occurs. It should occur at 0.5 LSB = 3.3/4096/2 = 0.4028 mV. &lt;br /&gt;
Offset: 55.35 mV - 0.4028 mV = 54.95 mV&lt;br /&gt;
&lt;br /&gt;
==Temperature calibration==&lt;br /&gt;
A set of experiments have been carried out to calibrate the different sensors using a dry-well calibrator. &lt;br /&gt;
The reference probe was a Sensing Devices SDL385 PRT. &lt;br /&gt;
The levels of calibration was: room temperature, 50, 100, 150, and 200 degrees C.&lt;br /&gt;
&lt;br /&gt;
===Thermistor===&lt;br /&gt;
The thermistor in use was a standard EPCOS 100K B57560G104F. This thermistor has a resistance tolerance of 2 %. The value of the pull-up resistor as measured during calibration was 4740.17501. This value seemed to work well at all levels of calibration, although a little on the high side compared to the reference. &lt;br /&gt;
&lt;br /&gt;
===PT1000===&lt;br /&gt;
The PT1000 in use was a Heraeus 31500989 [https://www.heraeus.com/media/media/hne/datasheets/sensor_assemblies_1/Heraeus_W-EYK_Sensor_E.pdf] works well. The tolerance class given in the datasheet is &amp;quot;F 0.10 / Class 1/3 B&amp;quot;. There are two different tolerances here: F0.10 and one third of Class B. The accuracy looks good at all temperatures, perhaps a bit on the high side if using the calibrated value for the pull-up. During the testing, 10 ohm was subtracted from the calibrated value.&lt;br /&gt;
&lt;br /&gt;
===PT100===&lt;br /&gt;
The PT100 used in the calibration was the E3D PT100 with the INA826 amplifier board. There is no datasheet available for the PT100 sensor and no mention of what tolerance there is on the reference resistors used. Furthermore Klipper expects the reference voltage to be 5V exactly, and there is no way to supply a measured value. Measurements on Recore has shown that the value is often a bit lower due to the PMIC for the 5V output on the &amp;quot;input&amp;quot; ports. 4.979 V has been measured and is likely an expected value.&lt;br /&gt;
&lt;br /&gt;
===Thermocouple===&lt;br /&gt;
Using the calibration values directly will give a slight offset to the thermocouple measurements. &lt;br /&gt;
The gain and ADC voltage can be used as measured during calibration. It should be in the region of 101 for gain and 3.307 for ADC voltage. As for the offset, that can be increased slightly to compensate for the cold junction temperature difference. For instance, the measured offset for the test board was 0.0032960, but a value of 0.00340 fit the data points well. The measurements were done on T2, so it it possible that the distance from the cold junction caused the offset. The cold junction thermistor is located between T0 and T1.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
====Where can I ask for help?====&lt;br /&gt;
:You can join the Discord: https://discord.gg/bCnp9H5SB5&lt;br /&gt;
====What comes in the box with the Recore? Specifically, terminal connectors for power, etc?====&lt;br /&gt;
:It's only the board, no cables or connectors. There is a bag of connectors available to purchase in the web shop.&lt;br /&gt;
====Do I need access to those 3 buttons on the board?====&lt;br /&gt;
:It is not necessary to have access to the three buttons for normal use.&lt;br /&gt;
====What's the maximum current draw for heat bed?====&lt;br /&gt;
:This has been tested up to 30 A with good cooling using a fan and a heat sink.&lt;br /&gt;
&lt;br /&gt;
====I have a gadget that I want to connect with SPI. Is that possible?====&lt;br /&gt;
:On Recore A7, there is support for an SPI peripheral. The pins are broken out on header S6/S7.&lt;br /&gt;
&lt;br /&gt;
====What exactly is the role of the AR100 device?====&lt;br /&gt;
:The AR100 handles the fast real-time aspects, mainly the stepper motors and end stops.&lt;br /&gt;
&lt;br /&gt;
====What voltage fans are supported?====&lt;br /&gt;
:The same voltage as the input voltage, either 12 V or 24 V. You can experiment with PWM for running lower voltage fans on 24 V input.&lt;br /&gt;
====Where is the board layout file?====&lt;br /&gt;
:The Layout file will not be available. It is an &amp;quot;open schematic&amp;quot; board, not open source hardware&lt;br /&gt;
====Where are you shipping from?====&lt;br /&gt;
:Boards are shipping from Norway. Eventually shipping will be from a warehouse in the US&lt;br /&gt;
&lt;br /&gt;
= Known hardware issues for rev A7=&lt;br /&gt;
=== Neopixels needs a lower value pull-up resistor than the 1K present on the board===&lt;br /&gt;
&lt;br /&gt;
==List of changes to revision A7 from A6==&lt;br /&gt;
# Step down AOZ2151EQI-30, lower dissipation. &lt;br /&gt;
# Separate fan over current protection.&lt;br /&gt;
# Use one of the electrolytic capacitors as input capacitor. &lt;br /&gt;
# Add a 10K pull-down on the USB power lines, so the USB over-current is unambiguous.&lt;br /&gt;
# Make op-amp more symmetric in order to improve the amplifier issue from A6.&lt;br /&gt;
# Add USR pin to the DBG header&lt;br /&gt;
# Add BOOT pin to the DBG header&lt;br /&gt;
# Move the USB activity LED close to the USB hub. &lt;br /&gt;
# Use CY7C65634 USB hub because GL850G-OHY37 is discontinued&lt;br /&gt;
# Change MCU and DBG connectors from 4 to 6 pins.&lt;br /&gt;
# Add SPI to S6/S7&lt;br /&gt;
# Add a guard ring on the edge on all layers. &lt;br /&gt;
# Use Kelvin connection on mosfets for Op-amps.&lt;br /&gt;
# Mitigate inrush current. Consider C214 = 1 nF from G to GND.&lt;br /&gt;
# Make better return paths for eth clock traces.&lt;br /&gt;
&lt;br /&gt;
= Migrating Klipper config from A6 to A7 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Section [recore]&lt;br /&gt;
|-&lt;br /&gt;
|Before&lt;br /&gt;
|After&lt;br /&gt;
|-&lt;br /&gt;
|revision: A6&lt;br /&gt;
|revision: A7&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|[tmc2209 stepper_x]&lt;br /&gt;
|-&lt;br /&gt;
|Before&lt;br /&gt;
|After&lt;br /&gt;
|-&lt;br /&gt;
|uart_pin: ar100:PB1&lt;br /&gt;
tx_pin: ar100:PB0&lt;br /&gt;
|uart_pin: ar100:PE16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|[mcu]&lt;br /&gt;
|-&lt;br /&gt;
|Before&lt;br /&gt;
|After&lt;br /&gt;
|-&lt;br /&gt;
|serial: /dev/ttyS4&lt;br /&gt;
|serial: /dev/ttyS2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|[fan]&lt;br /&gt;
|-&lt;br /&gt;
|Before&lt;br /&gt;
|After&lt;br /&gt;
|-&lt;br /&gt;
|pin: PB0&lt;br /&gt;
|pin: PF0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=OEM_customization&amp;diff=897</id>
		<title>OEM customization</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=OEM_customization&amp;diff=897"/>
		<updated>2023-03-13T11:54:07Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide documents how one can hide the Linux boot messages from the HDMI, in case you want to have a really clean display startup option.&lt;br /&gt;
&lt;br /&gt;
== How to hide systemd messages at boot ==&lt;br /&gt;
&lt;br /&gt;
To hide systemd messages from the screen (before any GUI takes over for instance), you need a couple of steps.&lt;br /&gt;
&lt;br /&gt;
=== Editing /boot/armbianEnv.txt ===&lt;br /&gt;
The first step is to remount /boot as a read-write partition because by default all files in there are protected.&lt;br /&gt;
To do so, you need to ssh in, and execute (as the debian user):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo mount -o remount,rw&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can edit the file with&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /boot/armbianEnv.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== armbianEnv extraargs ===&lt;br /&gt;
&lt;br /&gt;
Now the file contains multiple sections, each parameter line starts with parameterName, followed by = and the values for that parameter.&lt;br /&gt;
&lt;br /&gt;
The one we want to modify here is the ''extraargs'' parameter line.&lt;br /&gt;
&lt;br /&gt;
To disable systemd output, make sure you have in that line (and not a new line!):&lt;br /&gt;
&amp;lt;pre&amp;gt;systemd.show_status=0 vt_global_cursor_default=0 quiet&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you're done, exit and save the file with Ctrl+X and enter.&lt;br /&gt;
&lt;br /&gt;
'''Make sure to reboot as soon as possible to prevent any corruption to any of the /boot files.'''&lt;br /&gt;
&lt;br /&gt;
== Hiding the text login prompt ==&lt;br /&gt;
&lt;br /&gt;
Depending on what application or framebuffer image you're using, you may get the occasional drop to the VT1 (virtual terminal 1) on the display, and it will show you a simple text login prompt that you may wish to hide.&lt;br /&gt;
&lt;br /&gt;
To do so, you simply need to run:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemctl mask getty@tty1&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=OEM_customization&amp;diff=896</id>
		<title>OEM customization</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=OEM_customization&amp;diff=896"/>
		<updated>2023-03-13T11:53:03Z</updated>

		<summary type="html">&lt;p&gt;Jon: Created page with &amp;quot;This guide documents how one can hide the Linux boot messages from the HDMI, in case you want to have a really clean display startup option.  == How to hide systemd messages a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide documents how one can hide the Linux boot messages from the HDMI, in case you want to have a really clean display startup option.&lt;br /&gt;
&lt;br /&gt;
== How to hide systemd messages at boot ==&lt;br /&gt;
&lt;br /&gt;
To hide systemd messages from the screen (before any GUI takes over for instance), you need a couple of steps.&lt;br /&gt;
&lt;br /&gt;
=== Editing /boot/armbianEnv.txt ===&lt;br /&gt;
The first step is to remount /boot as a read-write partition because by default all files in there are protected.&lt;br /&gt;
To do so, you need to ssh in, and execute (as the debian user):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;sudo mount -o remount,rw&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can edit the file with&lt;br /&gt;
&amp;lt;nowiki&amp;gt;sudo nano /boot/armbianEnv.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== armbianEnv extraargs ===&lt;br /&gt;
&lt;br /&gt;
Now the file contains multiple sections, each parameter line starts with parameterName, followed by = and the values for that parameter.&lt;br /&gt;
&lt;br /&gt;
The one we want to modify here is the ''extraargs'' parameter line.&lt;br /&gt;
&lt;br /&gt;
To disable systemd output, make sure you have in that line (and not a new line!):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;systemd.show_status=0 vt_global_cursor_default=0 quiet&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you're done, exit and save the file with Ctrl+X and enter.&lt;br /&gt;
&lt;br /&gt;
'''Make sure to reboot as soon as possible to prevent any corruption to any of the /boot files.'''&lt;br /&gt;
&lt;br /&gt;
== Hiding the text login prompt ==&lt;br /&gt;
&lt;br /&gt;
Depending on what application or framebuffer image you're using, you may get the occasional drop to the VT1 (virtual terminal 1) on the display, and it will show you a simple text login prompt that you may wish to hide.&lt;br /&gt;
&lt;br /&gt;
To do so, you simply need to run:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;sudo systemctl mask getty@tty1&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Main_Page&amp;diff=895</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Main_Page&amp;diff=895"/>
		<updated>2023-03-13T11:43:44Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tweekihide:navbar-right}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Delta H.jpg]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the documentation for Recore, Manga Screen 1 and 2, Refactor and Toggle hardware and software products developed by made by Intelligent Agent. All software is free and open source. Recore is open schematic hardware and can be conveniently purchased in the store. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mediawiki&amp;quot; style=&amp;quot;width: 100%; vertical-align:top;&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* [[Recore A7]]&lt;br /&gt;
* [[Recore A6]]&lt;br /&gt;
* [[Remove A1]]&lt;br /&gt;
* [[Restep A1]]&lt;br /&gt;
* [[Rexfer A0]]&lt;br /&gt;
* [[Manga Screen 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Refactor]] Complete Linux distribution for 3D-printers&lt;br /&gt;
* [[Reflash]] Image to install Refactor&lt;br /&gt;
* [[Toggle]] The software for Manga Screen&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==HowTo==&lt;br /&gt;
* [[Getting started]]&lt;br /&gt;
* [[Connecting | Connecting to the board]]&lt;br /&gt;
* [[Printer_101 | Printer 101]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
====Old hardware====&lt;br /&gt;
* [[Replicape Rev B]]&lt;br /&gt;
* [[Replicape Rev A]]&lt;br /&gt;
* [[Manga Screen 1]]&lt;br /&gt;
* [[Revolve]] (Cancelled)&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
====Off site====&lt;br /&gt;
* [https://www.klipper3d.org/ Klipper] The &amp;quot;firmware&amp;quot; for Replicape/Recore&lt;br /&gt;
* [https://docs.mainsail.xyz/ Mainsail] 3D-printer UI&lt;br /&gt;
* [https://octoprint.org/ OctoPrint ] The software for controlling the printer. &lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
====Guides====&lt;br /&gt;
* [[BLTouch | Using BLTouch with Replicape]]&lt;br /&gt;
* [[Adding a Servo | Adding a Servo to Replicape]]&lt;br /&gt;
* [[Adding a Probe for G29/G33]]&lt;br /&gt;
* [[Cartesian | Cartesian configuration guide]]&lt;br /&gt;
* [[Corexy | CoreXY configuration guide]]&lt;br /&gt;
* [[OEM_customization | OEM display customisation on Recore]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
* [[ Dev Team Bios | Development Team ]]&lt;br /&gt;
* [[Beta Testing | Running the Develop Branch on Your Printer]]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
* [[Special:CreateAccount | Add new users to this wiki]]&lt;br /&gt;
* [[Formatting | Formatting on this wiki]]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
== Legacy Information ==&lt;br /&gt;
* [[Thing]]&lt;br /&gt;
* [[Thing Delta]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=894</id>
		<title>Refactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=894"/>
		<updated>2023-03-07T21:11:47Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor header 2.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refactor is the next generation of controller board software stack installation.&lt;br /&gt;
&lt;br /&gt;
It is meant to simplify the lives of new users when they begin using a Thing-Printer controller board. Pre-built images of Refactor are available for users who want to get up and running quickly with Recore.&lt;br /&gt;
&lt;br /&gt;
Refactor is available in two verisons: Recore OctoPrint and Recore Mainsail, with updates being propagated simultaneously for both images. Refactor v3.0.3 has support for Replicape and only Recore with OctoPrint. &lt;br /&gt;
&lt;br /&gt;
These instructions are for version v3.1.0, for older versions:&lt;br /&gt;
* [[Refactor_v3.0.3]]&lt;br /&gt;
* [[Refactor_v3.0.2]]&lt;br /&gt;
&lt;br /&gt;
=Installing an image=&lt;br /&gt;
For instructions on making a flasher image, have a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
=Latest images=&lt;br /&gt;
The latest images for Recore and Replicape are available from github: https://github.com/intelligent-agent/Refactor/releases&lt;br /&gt;
&lt;br /&gt;
=Installed software=&lt;br /&gt;
==Recore OctoPrint==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* OctoPrint (1.7.3) https://github.com/OctoPrint/OctoPrint&lt;br /&gt;
** Octoprint Klipper (master) https://github.com/thelastWallE/OctoprintKlipperPlugin&lt;br /&gt;
** Octoprint Refactor (main) https://github.com/intelligent-agent/octoprint_refactor&lt;br /&gt;
** OctoPrint Toggle (master) https://github.com/intelligent-agent/octoprint_toggle&lt;br /&gt;
** OctoPrint Top Temp (master) https://github.com/LazeMSS/OctoPrint-TopTemp.git&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* Toggle (v1.4.1) https://github.com/intelligent-agent/toggle&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
==Recore Mainsail==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* Mainsail  (v2.1.2) https://github.com/mainsail-crew/mainsail&lt;br /&gt;
* Moonraker (master) https://github.com/Arksine/moonraker&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* KlipperScreen (3b4555b) https://github.com/intelligent-agent/KlipperScreen&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
It can be a good idea to test the board on the bench before installing it in the printer. Use the USB-C connector to power the board. &lt;br /&gt;
&lt;br /&gt;
Once the board is powered up, use a computer to access the web interface provided by OctoPrint. &lt;br /&gt;
In order to get access to OctoPrint, a network cable must be connected to the board and to a network switch. It is also possible to use a wifi dongle. &lt;br /&gt;
If a network cable is used, the board should respond to the address:&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
Once the OctoPrint interface is visible, run through the wizard to set up a new printer. &lt;br /&gt;
After the wizard is done, go to the Klipper tab in OctoPrint and edit the Klipper config file. &lt;br /&gt;
This is where the bulk of the work will happen. &lt;br /&gt;
&lt;br /&gt;
== Klipper configuration ==&lt;br /&gt;
There is a standard klipper configuration file that comes with Refactor. The configuration file is set up &lt;br /&gt;
to work out of the box, but it assumes that there is a 100 K ntc thermistor on analog inputs T0 and T3 (bed). &lt;br /&gt;
If these are not present, Klipper will halt with a warning. &lt;br /&gt;
&lt;br /&gt;
The default klipper config can be used as a starting point for building a custom config file for the printer at hand. &lt;br /&gt;
&lt;br /&gt;
After the Klipper configuration is complete, do a test print to make sure everything is working. &lt;br /&gt;
&lt;br /&gt;
=== Recore booting ===&lt;br /&gt;
Recore comes with Refactor pre-installed. &lt;br /&gt;
&lt;br /&gt;
The Recore images will need to be flashed to a USB flash drive, as there is no SD slot on the board. Recore's uboot is designed to attempt to boot from a USB drive if there is no OS on the eMMC. &lt;br /&gt;
&lt;br /&gt;
There are several stages to booting Recore, and depending on which media is installed, the boot process will &lt;br /&gt;
try and boot either from eMMC, USB host or USB device. &lt;br /&gt;
===Booting Recore from eMMC (the normal way)===&lt;br /&gt;
# Turn on power&lt;br /&gt;
# The BROM will load u-boot SPL from eMMC&lt;br /&gt;
# The u-boot SPL will load u-boot&lt;br /&gt;
# u-boot will load Linux&lt;br /&gt;
# Linux will load the rootfs from eMMC.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from eMMC, but load rootfs from USB===&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
Using a root file system on a different drive work well if the kernel version is the same on both media. &lt;br /&gt;
The kernel version has changed between Refactor v3.0.2-RC3 and v3.0.2-RC4. The board will still boot, but will not load &lt;br /&gt;
kernel modules as expected, including nft that maps OctoPrint to the HTTP port (80). &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the board is working normally and you are able to log in through ssh, but want to try out a new &lt;br /&gt;
Refactor version you can let the rootfs be loaded from a USB drive (mass storage device):&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board. &lt;br /&gt;
# Boot the board normally&lt;br /&gt;
## Open the Refactor tab in OctoPrint. &lt;br /&gt;
## Select '''run from USB'''&lt;br /&gt;
#:or&lt;br /&gt;
## Use SSH to log into the board: '''ssh root@recore.local'''&lt;br /&gt;
## Run the command '''set-boot-media usb'''&lt;br /&gt;
# Reboot&lt;br /&gt;
The board should now be have the rootfs from the USB drive.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from USB, load Linux kernel from USB drive===&lt;br /&gt;
This method requires a UART to USB adapter that can plug into a host computer. &lt;br /&gt;
There is a 4 pin header on Recore marked '''DBG''', where UART 0 is routed. All u-boot and kernel &lt;br /&gt;
messages will appear here. The baud rate is 115200. &lt;br /&gt;
If the eMMC is partitioned and has an OS, u-boot will launch right into that. In order to override that and &lt;br /&gt;
load the boot script from a USB drive, stop u-boot by pressing a key and then write:  &lt;br /&gt;
&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board and apply power&lt;br /&gt;
# When the boot process gets to u-boot, you will see: '''Hit any key to stop autoboot:  '''&lt;br /&gt;
# Hit the Any key. &lt;br /&gt;
# Then write '''run bootcmd_usb0'''&lt;br /&gt;
This will load the U-boot script from the USB drive and use the USB drive as the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Boot Recore from a USB stick using the FEL button===&lt;br /&gt;
If u-boot should be loaded from a host computer and kernel and rootfs is loaded from a USB drive:&lt;br /&gt;
# Flash the [[Reflash]] Linux distro to a USB drive. &lt;br /&gt;
# Insert the USB drive in the Recore board in one of the two host connectors close to the HDMI.&lt;br /&gt;
# Hold down the FEL button while applying power to the board via the USB-C connector.&lt;br /&gt;
# Download the Recore repository https://github.com/intelligent-agent/Recore&lt;br /&gt;
# Install the sunxi-tools program&lt;br /&gt;
# Run the fel command ('''make fel''') from the host computer. All the necessary binarys are in the Recore repository:&lt;br /&gt;
You can read more about the steps needed to boot aboard in FEL mode on the Sunxi wiki: https://linux-sunxi.org/FEL&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Depending on what linux platform you're running from, sunxi-tools will require the following dependencies to compile properly:&lt;br /&gt;
* libftd-dev&lt;br /&gt;
* libusbx-dev&lt;br /&gt;
* libudev-dev&lt;br /&gt;
(These are Debian/ubuntu names. For Fedora, change -dev to -devel)&lt;br /&gt;
&lt;br /&gt;
This should upload u-boot from the host computer to the board via the USB cable. u-boot will then boot from the connected USB drive. &lt;br /&gt;
Please note that in some instances, the USB drive is not detected as a mass storage device without also having the VIN power connector inserted. See more in [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|in the &amp;quot;known errors&amp;quot; section of Recore A6]]&lt;br /&gt;
&lt;br /&gt;
==Upgrading Refactor==&lt;br /&gt;
After upgrading refactor, if the recore board is A5 or older, you can set the device tree to a different version by running the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use-recore-revision a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After a reboot, you can check that the loaded device tree matches the revision of firmware. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /sys/firmware/devicetree/base/model&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It's also worth noting that the klipper configuration is a bit different between the A5 and A6 revisions. The A6 is the now the default configuration, but A5 is also present for use. It can be found on github or on the board. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /home/debian/klipper/config/generic-recore-a5.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Debian via apt upgrade===&lt;br /&gt;
The /boot partition of Refactor is mounted Read Only, so it will have to be remounted as Read Write before running an upgrade: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from OctoPrint===&lt;br /&gt;
The only way to upgrade Refactor is by flashing a new version. In OctoPrint there is a &amp;quot;Refactor&amp;quot; plugin that can aid with this. If Refactor is run from a USB stick, a new version of can be downloaded and flashed on the eMMC.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor-tab.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a separate image used for upgrading Refactor. Take a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from the command line===&lt;br /&gt;
To reboot into a USB drive: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set-boot-media usb&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note''': Reflash may not show up with the same IP as your previous ReFactor instance did. It will depend on your router's DHCP, so be sure to check if the IP has changed, even if the MAC has not.&lt;br /&gt;
&lt;br /&gt;
==Using Moonraker and Mainsail instead of OctoPrint==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mainsail.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to switch to using Mainsail as user interface to control the printer instead of OctoPrint. &lt;br /&gt;
The best way to do that is by running some install scripts on the command line: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /home/debian/install-mainsail.sh&lt;br /&gt;
sudo /home/debian/install-moonraker.sh&lt;br /&gt;
sudo enable-mainsail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that Mainsail should be available from http://recore.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info&amp;quot;&amp;gt;&lt;br /&gt;
===='''Info'''====&lt;br /&gt;
You might have to change the settings of Moonraker to allow your host computer to access the &lt;br /&gt;
user interface. Check that the IP of your host computer is allowed in the moonraker.conf&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the allowed IP range run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart moonraker.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart moonraker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using KlipperScreen instead of Toggle==&lt;br /&gt;
With version 3.0.4, KlipperScreen can be installed. Use SSH to get access to Recore, then run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install-klipperscreen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you update /home/debian/moonraker.conf to allow for 127.0.0.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[authorization]&lt;br /&gt;
trusted_clients:&lt;br /&gt;
  127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weston might be rotated by default. To change rotation: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/xdg/weston/weston.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The rotation should be 0&lt;br /&gt;
&lt;br /&gt;
==Recompiling and installing binaries==&lt;br /&gt;
===Update u-boot on Recore===&lt;br /&gt;
This is not something the regular user would need to do, but documented here for convenience. &lt;br /&gt;
Place u-boot-sunxi-with-spl.bin in sector 15 (8KB offset)  &lt;br /&gt;
Flash the binary &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8 conv=notrunc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: U-boot needs to be patched in order to use the eMMC as the first (and only) boot device. &lt;br /&gt;
The changes can be done in &amp;quot;spl_mmc_get_device_index&amp;quot; where dev_num should be 0 instead of 1.&lt;br /&gt;
&lt;br /&gt;
===AR100 firmware===&lt;br /&gt;
The AR100 CPU needs a binary file that is loaded on startup by the systemd file klipper.service&lt;br /&gt;
The AR100 binary file comes pre-compiled in Refactor, so most users should not have to re-compile it. &lt;br /&gt;
For experiments the AR100 binary can be recompiled on Recore (architecture aarch64) or on a host computer (amd64 or similar).  &lt;br /&gt;
&lt;br /&gt;
====Compiling the ar100 binary====&lt;br /&gt;
To configure klipper for AR100 and build the binary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PATH=$PATH:/opt/output/bin&lt;br /&gt;
cd /home/debian/klipper/&lt;br /&gt;
cp test/configs/ar100.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will produce a bin file located in out/ar100.bin, so it should be moved to /opt/firmware&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv out/ar100.bin /opt/firmware/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the AR100 binary has been updated, klipper.service can be restarted which then loads the new AR100 binary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for ARM64====&lt;br /&gt;
The AR100 needs a cross compilation toolchain. For ARM64, it can be downloaded from feeds.iagent.no:&lt;br /&gt;
&lt;br /&gt;
http://feeds.iagent.no/toolchains/  &lt;br /&gt;
&lt;br /&gt;
The toolchain has been built with  &lt;br /&gt;
&lt;br /&gt;
https://github.com/richfelker/musl-cross-make&lt;br /&gt;
&lt;br /&gt;
GCC version: 9.2.0&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for x86_64====&lt;br /&gt;
The toolchain used during automatic testing and is the same used for the CRUST firmware project: &lt;br /&gt;
&lt;br /&gt;
https://github.com/crust-firmware/crust#building-the-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====STM32 firmware====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The latest Refactor now does automatic flashing of the STM32 firmware on first boot after a fresh install. This was merged with PR#199 in Refactor on Github. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The firmware for the stm32f031 mcu that is responsible for ADC &lt;br /&gt;
conversions and PWM for heaters and fans comes pre-installed in the flash of the MCU. &lt;br /&gt;
It can be recreated on the board using the Klipper build system.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper&lt;br /&gt;
cp test/configs/stm32f031.config .config&lt;br /&gt;
make menuconfig&lt;br /&gt;
-&amp;gt; Enable extra low-level configuration options&lt;br /&gt;
-&amp;gt; Processor model (STM32F031)&lt;br /&gt;
-&amp;gt; Bootloader offset (No bootloader)&lt;br /&gt;
-&amp;gt; Clock Reference (Internal clock)&lt;br /&gt;
-&amp;gt; (16) Internal clock trim override&lt;br /&gt;
-&amp;gt; Communication interface (Serial (on USART2 PA15/PA14))&lt;br /&gt;
-&amp;gt; Baud rate for serial port: 250000&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flashing STM32 firmware====&lt;br /&gt;
To flash the STM32 firmware:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp out/klipper.bin /opt/firmware/stm32.bin&lt;br /&gt;
sudo flash-stm32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replicape ===&lt;br /&gt;
&lt;br /&gt;
The Replicape images will be meant to run from the micro SD you flash it to. You cannot boot the Replicape from a USB key at this time.&lt;br /&gt;
By default, Refactor images do not flash to the eMMC the way Umikaze used to. Part of this is historical - the early betas of Refactor did not fit on the eMMC, but there's another advantage as well: it allows you to test out Refactor on an SD card while keeping your working Redeem config on the eMMC.&lt;br /&gt;
&lt;br /&gt;
==== Booting Refactor from USB ====&lt;br /&gt;
If you want to boot Refactor from a USB stick, you need to stop u-boot by pressing space during boot. &lt;br /&gt;
You must run these commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setenv bootpart 0:1; setenv oldroot /dev/sda1; setenv devnum 0; run usb_boot&lt;br /&gt;
&lt;br /&gt;
load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt; env import -t ${loadaddr} ${filesize}&lt;br /&gt;
&lt;br /&gt;
run uname_boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Klipper===&lt;br /&gt;
Klipper is run as a systemd service. It should not normally need to be restarted from the command line, but during development it can be necessary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The log for Klipper is located in /tmp. It can be viewed as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /tmk/klippy.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Klipper can also be restarted from the OctoPrint interface. On the &amp;quot;Klipper&amp;quot; tab, press &amp;quot;Firmware&amp;quot; to restart the Klipper firmware. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Klipper-firmware-press.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Toggle===&lt;br /&gt;
Toggle is started automatically by the systemd service toggle.service. A user is created for Toggle on first boot, but the credentials are not set until a user is created in OctoPrint. Once the wizard has been completed, the Toggle user is active, but the credentials will not be valid until OctoPrint is restarted. Therefore, if Toggle is needed, restart OctoPrint after the wizard is complete.&lt;br /&gt;
&lt;br /&gt;
===Running OctoPrint===&lt;br /&gt;
OctoPrint is stated on boot. If there is a need to restart the daemon, use this command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart octoprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Refactor build system=&lt;br /&gt;
&lt;br /&gt;
Refactor uses [https://www.ansible.com/ Ansible] as the underlying framework to describe the desired system state. &lt;br /&gt;
There are many reasons for this:&lt;br /&gt;
&lt;br /&gt;
# Ansible describes the system's end state, not individual actions to perform, so it is relatively easy to port across platforms (i.e. debian, arch, BSD...)&lt;br /&gt;
# The Refactor repository can be updated from the git repository and Ansible will only change what has been updated from the previous version, not needing a complete reinstallation of the system for upgrades.&lt;br /&gt;
# Description of components is modular, making it easy to pick and choose different components for the end goal desired, while keeping each component's setup independent and reliable, and independently updatable.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Remove_A1&amp;diff=796</id>
		<title>Remove A1</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Remove_A1&amp;diff=796"/>
		<updated>2022-12-14T10:09:42Z</updated>

		<summary type="html">&lt;p&gt;Jon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Remove is an accelerometer for doing input shaping with Klipper.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Remove A0 iso.jpg|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pinout diagram ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Remove pinout.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klipper configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# The Remove resonance tester mcu&lt;br /&gt;
[mcu rp2040]&lt;br /&gt;
serial: /dev/ttyACM0&lt;br /&gt;
baud: 1500000&lt;br /&gt;
&lt;br /&gt;
[adxl345]&lt;br /&gt;
cs_pin: rp2040:gpio5&lt;br /&gt;
spi_bus: spi0a&lt;br /&gt;
&lt;br /&gt;
[resonance_tester]&lt;br /&gt;
accel_chip: adxl345&lt;br /&gt;
probe_points:&lt;br /&gt;
    100, 100, 20  # an example&lt;br /&gt;
&lt;br /&gt;
[static_digital_output remove_leds]&lt;br /&gt;
pins: rp2040:gpio17, rp2040:gpio18&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Klipper usage ===&lt;br /&gt;
&lt;br /&gt;
At this time there is an issue with the A1 board where the initialization can fail in Klipper.&lt;br /&gt;
&lt;br /&gt;
If you follow the klipper documentation and run the expected commands you may get the following error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Invalid adxl345 id (got f2 vs e5).&lt;br /&gt;
This is generally indicative of connection problems&lt;br /&gt;
(e.g. faulty wiring) or a faulty adxl345 chip.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does '''not''' mean your Remove is faulty. Try running the command again, it is a known initialization error, and will go away once the initial message happens. It will happen again next time you restart klipper though, as it re-initializes the ADXL345 again.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=788</id>
		<title>Refactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=788"/>
		<updated>2022-11-05T21:59:44Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Upgrading Refactor from the command line */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refactor is the next generation of controller board software stack installation.&lt;br /&gt;
&lt;br /&gt;
It is meant to simplify the lives of new users when they begin using a Thing-Printer controller board. Pre-built images of Refactor are available for users who want to get up and running quickly with Recore.&lt;br /&gt;
&lt;br /&gt;
Refactor is available in two verisons: Recore OctoPrint and Recore Mainsail, with updates being propagated simultaneously for both images. Refactor v3.0.3 has support for Replicape and only Recore with OctoPrint. &lt;br /&gt;
&lt;br /&gt;
These instructions are for version v3.1.0, for older versions:&lt;br /&gt;
* [[Refactor_v3.0.3]]&lt;br /&gt;
* [[Refactor_v3.0.2]]&lt;br /&gt;
&lt;br /&gt;
=Installing an image=&lt;br /&gt;
For instructions on making a flasher image, have a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
=Latest images=&lt;br /&gt;
The latest images for Recore and Replicape are available from github: https://github.com/intelligent-agent/Refactor/releases&lt;br /&gt;
&lt;br /&gt;
=Installed software=&lt;br /&gt;
==Recore OctoPrint==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* OctoPrint (1.7.3) https://github.com/OctoPrint/OctoPrint&lt;br /&gt;
** Octoprint Klipper (master) https://github.com/thelastWallE/OctoprintKlipperPlugin&lt;br /&gt;
** Octoprint Refactor (main) https://github.com/intelligent-agent/octoprint_refactor&lt;br /&gt;
** OctoPrint Toggle (master) https://github.com/intelligent-agent/octoprint_toggle&lt;br /&gt;
** OctoPrint Top Temp (master) https://github.com/LazeMSS/OctoPrint-TopTemp.git&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* Toggle (v1.4.1) https://github.com/intelligent-agent/toggle&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
==Recore Mainsail==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* Mainsail  (v2.1.2) https://github.com/mainsail-crew/mainsail&lt;br /&gt;
* Moonraker (master) https://github.com/Arksine/moonraker&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* KlipperScreen (3b4555b) https://github.com/intelligent-agent/KlipperScreen&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
It can be a good idea to test the board on the bench before installing it in the printer. Use the USB-C connector to power the board. &lt;br /&gt;
&lt;br /&gt;
Once the board is powered up, use a computer to access the web interface provided by OctoPrint. &lt;br /&gt;
In order to get access to OctoPrint, a network cable must be connected to the board and to a network switch. It is also possible to use a wifi dongle. &lt;br /&gt;
If a network cable is used, the board should respond to the address:&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
Once the OctoPrint interface is visible, run through the wizard to set up a new printer. &lt;br /&gt;
After the wizard is done, go to the Klipper tab in OctoPrint and edit the Klipper config file. &lt;br /&gt;
This is where the bulk of the work will happen. &lt;br /&gt;
&lt;br /&gt;
== Klipper configuration ==&lt;br /&gt;
There is a standard klipper configuration file that comes with Refactor. The configuration file is set up &lt;br /&gt;
to work out of the box, but it assumes that there is a 100 K ntc thermistor on analog inputs T0 and T3 (bed). &lt;br /&gt;
If these are not present, Klipper will halt with a warning. &lt;br /&gt;
&lt;br /&gt;
The default klipper config can be used as a starting point for building a custom config file for the printer at hand. &lt;br /&gt;
&lt;br /&gt;
After the Klipper configuration is complete, do a test print to make sure everything is working. &lt;br /&gt;
&lt;br /&gt;
=== Recore booting ===&lt;br /&gt;
Recore comes with Refactor pre-installed. &lt;br /&gt;
&lt;br /&gt;
The Recore images will need to be flashed to a USB flash drive, as there is no SD slot on the board. Recore's uboot is designed to attempt to boot from a USB drive if there is no OS on the eMMC. &lt;br /&gt;
&lt;br /&gt;
There are several stages to booting Recore, and depending on which media is installed, the boot process will &lt;br /&gt;
try and boot either from eMMC, USB host or USB device. &lt;br /&gt;
===Booting Recore from eMMC (the normal way)===&lt;br /&gt;
# Turn on power&lt;br /&gt;
# The BROM will load u-boot SPL from eMMC&lt;br /&gt;
# The u-boot SPL will load u-boot&lt;br /&gt;
# u-boot will load Linux&lt;br /&gt;
# Linux will load the rootfs from eMMC.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from eMMC, but load rootfs from USB===&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
Using a root file system on a different drive work well if the kernel version is the same on both media. &lt;br /&gt;
The kernel version has changed between Refactor v3.0.2-RC3 and v3.0.2-RC4. The board will still boot, but will not load &lt;br /&gt;
kernel modules as expected, including nft that maps OctoPrint to the HTTP port (80). &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the board is working normally and you are able to log in through ssh, but want to try out a new &lt;br /&gt;
Refactor version you can let the rootfs be loaded from a USB drive (mass storage device):&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board. &lt;br /&gt;
# Boot the board normally&lt;br /&gt;
## Open the Refactor tab in OctoPrint. &lt;br /&gt;
## Select '''run from USB'''&lt;br /&gt;
#:or&lt;br /&gt;
## Use SSH to log into the board: '''ssh root@recore.local'''&lt;br /&gt;
## Run the command '''set-boot-media usb'''&lt;br /&gt;
# Reboot&lt;br /&gt;
The board should now be have the rootfs from the USB drive.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from USB, load Linux kernel from USB drive===&lt;br /&gt;
This method requires a UART to USB adapter that can plug into a host computer. &lt;br /&gt;
There is a 4 pin header on Recore marked '''DBG''', where UART 0 is routed. All u-boot and kernel &lt;br /&gt;
messages will appear here. The baud rate is 115200. &lt;br /&gt;
If the eMMC is partitioned and has an OS, u-boot will launch right into that. In order to override that and &lt;br /&gt;
load the boot script from a USB drive, stop u-boot by pressing a key and then write:  &lt;br /&gt;
&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board and apply power&lt;br /&gt;
# When the boot process gets to u-boot, you will see: '''Hit any key to stop autoboot:  '''&lt;br /&gt;
# Hit the Any key. &lt;br /&gt;
# Then write '''run bootcmd_usb0'''&lt;br /&gt;
This will load the U-boot script from the USB drive and use the USB drive as the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Boot Recore from a USB stick using the FEL button===&lt;br /&gt;
If u-boot should be loaded from a host computer and kernel and rootfs is loaded from a USB drive:&lt;br /&gt;
# Flash the [[Reflash]] Linux distro to a USB drive. &lt;br /&gt;
# Insert the USB drive in the Recore board in one of the two host connectors close to the HDMI.&lt;br /&gt;
# Hold down the FEL button while applying power to the board via the USB-C connector.&lt;br /&gt;
# Download the Recore repository https://github.com/intelligent-agent/Recore&lt;br /&gt;
# Install the sunxi-tools program&lt;br /&gt;
# Run the fel command ('''make fel''') from the host computer. All the necessary binarys are in the Recore repository:&lt;br /&gt;
You can read more about the steps needed to boot aboard in FEL mode on the Sunxi wiki: https://linux-sunxi.org/FEL&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Depending on what linux platform you're running from, sunxi-tools will require the following dependencies to compile properly:&lt;br /&gt;
* libftd-dev&lt;br /&gt;
* libusbx-dev&lt;br /&gt;
* libudev-dev&lt;br /&gt;
(These are Debian/ubuntu names. For Fedora, change -dev to -devel)&lt;br /&gt;
&lt;br /&gt;
This should upload u-boot from the host computer to the board via the USB cable. u-boot will then boot from the connected USB drive. &lt;br /&gt;
Please note that in some instances, the USB drive is not detected as a mass storage device without also having the VIN power connector inserted. See more in [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|in the &amp;quot;known errors&amp;quot; section of Recore A6]]&lt;br /&gt;
&lt;br /&gt;
==Upgrading Refactor==&lt;br /&gt;
After upgrading refactor, if the recore board is A5 or older, you can set the device tree to a different version by running the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use-recore-revision a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After a reboot, you can check that the loaded device tree matches the revision of firmware. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /sys/firmware/devicetree/base/model&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It's also worth noting that the klipper configuration is a bit different between the A5 and A6 revisions. The A6 is the now the default configuration, but A5 is also present for use. It can be found on github or on the board. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /home/debian/klipper/config/generic-recore-a5.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Debian via apt upgrade===&lt;br /&gt;
The /boot partition of Refactor is mounted Read Only, so it will have to be remounted as Read Write before running an upgrade: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from OctoPrint===&lt;br /&gt;
The only way to upgrade Refactor is by flashing a new version. In OctoPrint there is a &amp;quot;Refactor&amp;quot; plugin that can aid with this. If Refactor is run from a USB stick, a new version of can be downloaded and flashed on the eMMC.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor-tab.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a separate image used for upgrading Refactor. Take a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from the command line===&lt;br /&gt;
To reboot into a USB drive: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set-boot-media usb&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note''': Reflash may not show up with the same IP as your previous ReFactor instance did. It will depend on your router's DHCP, so be sure to check if the IP has changed, even if the MAC has not.&lt;br /&gt;
&lt;br /&gt;
==Using Moonraker and Mainsail instead of OctoPrint==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mainsail.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to switch to using Mainsail as user interface to control the printer instead of OctoPrint. &lt;br /&gt;
The best way to do that is by running some install scripts on the command line: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /home/debian/install-mainsail.sh&lt;br /&gt;
sudo /home/debian/install-moonraker.sh&lt;br /&gt;
sudo enable-mainsail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that Mainsail should be available from http://recore.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info&amp;quot;&amp;gt;&lt;br /&gt;
===='''Info'''====&lt;br /&gt;
You might have to change the settings of Moonraker to allow your host computer to access the &lt;br /&gt;
user interface. Check that the IP of your host computer is allowed in the moonraker.conf&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the allowed IP range run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart moonraker.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart moonraker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using KlipperScreen instead of Toggle==&lt;br /&gt;
With version 3.0.4, KlipperScreen can be installed. Use SSH to get access to Recore, then run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install-klipperscreen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you update /home/debian/moonraker.conf to allow for 127.0.0.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[authorization]&lt;br /&gt;
trusted_clients:&lt;br /&gt;
  127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weston might be rotated by default. To change rotation: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/xdg/weston/weston.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The rotation should be 0&lt;br /&gt;
&lt;br /&gt;
==Recompiling and installing binaries==&lt;br /&gt;
===Update u-boot on Recore===&lt;br /&gt;
This is not something the regular user would need to do, but documented here for convenience. &lt;br /&gt;
Place u-boot-sunxi-with-spl.bin in sector 15 (8KB offset)  &lt;br /&gt;
Flash the binary &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8 conv=notrunc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: U-boot needs to be patched in order to use the eMMC as the first (and only) boot device. &lt;br /&gt;
The changes can be done in &amp;quot;spl_mmc_get_device_index&amp;quot; where dev_num should be 0 instead of 1.&lt;br /&gt;
&lt;br /&gt;
===AR100 firmware===&lt;br /&gt;
The ar100 has a binary file that is loaded on startup by klipper.service&lt;br /&gt;
The binary file comes pre-compiled in Refactor, but can be recompiled on Recore (or on a host computer).&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for ARM64====&lt;br /&gt;
The AR100 needs a cross compilation toolchain. For ARM64, it can be downloaded from feeds.iagent.no:&lt;br /&gt;
&lt;br /&gt;
http://feeds.iagent.no/toolchains/  &lt;br /&gt;
&lt;br /&gt;
The toolchain has been built with  &lt;br /&gt;
&lt;br /&gt;
https://github.com/richfelker/musl-cross-make&lt;br /&gt;
&lt;br /&gt;
GCC version: 9.2.0&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for x86_64====&lt;br /&gt;
The toolchain used during automatic testing and is the same used for the CRUST firmware project: &lt;br /&gt;
&lt;br /&gt;
https://github.com/crust-firmware/crust#building-the-firmware&lt;br /&gt;
&lt;br /&gt;
====Compiling the ar100 binary====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
wget http://feeds.iagent.no/toolchains/or1k-linux-musl.tar.xz&lt;br /&gt;
tar xf or1k-linux-musl.tar.xz&lt;br /&gt;
export PATH=$PATH:/opt/output/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To configure klipper for AR100 and build the binary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper/&lt;br /&gt;
cp test/configs/ar100.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will produce a bin file located in out/ar100.bin, so it should be moved to /op/firmware&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv out/ar100.bin /opt/firmware/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the same operation that happens from the klipper.service script, so it can also be done by running &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====STM32 firmware====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The latest Refactor now does automatic flashing of the STM32 firmware on first boot after a fresh install. This was merged with PR#199 in Refactor on Github. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The firmware for the stm32f031 mcu that is responsible for ADC &lt;br /&gt;
conversions and PWM for heaters and fans comes pre-installed in the flash of the MCU. &lt;br /&gt;
It can be recreated on the board using the Klipper build system.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper&lt;br /&gt;
cp test/configs/stm32f031.config .config&lt;br /&gt;
make menuconfig&lt;br /&gt;
-&amp;gt; Enable extra low-level configuration options&lt;br /&gt;
-&amp;gt; Clock Reference internal&lt;br /&gt;
-&amp;gt; Communication interface (Serial (on USART2 PA15/PA14))&lt;br /&gt;
-&amp;gt; Baud rate for serial port: 250000&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flashing STM32 firmware====&lt;br /&gt;
To flash the STM32 firmware:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp out/klipper.bin /opt/firmware/stm32.bin&lt;br /&gt;
sudo flash-stm32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replicape ===&lt;br /&gt;
&lt;br /&gt;
The Replicape images will be meant to run from the micro SD you flash it to. You cannot boot the Replicape from a USB key at this time.&lt;br /&gt;
By default, Refactor images do not flash to the eMMC the way Umikaze used to. Part of this is historical - the early betas of Refactor did not fit on the eMMC, but there's another advantage as well: it allows you to test out Refactor on an SD card while keeping your working Redeem config on the eMMC.&lt;br /&gt;
&lt;br /&gt;
==== Booting Refactor from USB ====&lt;br /&gt;
If you want to boot Refactor from a USB stick, you need to stop u-boot by pressing space during boot. &lt;br /&gt;
You must run these commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setenv bootpart 0:1; setenv oldroot /dev/sda1; setenv devnum 0; run usb_boot&lt;br /&gt;
&lt;br /&gt;
load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt; env import -t ${loadaddr} ${filesize}&lt;br /&gt;
&lt;br /&gt;
run uname_boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Klipper===&lt;br /&gt;
Klipper is run as a systemd service. It should not normally need to be restarted from the command line, but during development it can be necessary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The log for Klipper is located in /tmp. It can be viewed as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /tmk/klippy.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Klipper can also be restarted from the OctoPrint interface. On the &amp;quot;Klipper&amp;quot; tab, press &amp;quot;Firmware&amp;quot; to restart the Klipper firmware. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Klipper-firmware-press.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Toggle===&lt;br /&gt;
Toggle is started automatically by the systemd service toggle.service. A user is created for Toggle on first boot, but the credentials are not set until a user is created in OctoPrint. Once the wizard has been completed, the Toggle user is active, but the credentials will not be valid until OctoPrint is restarted. Therefore, if Toggle is needed, restart OctoPrint after the wizard is complete.&lt;br /&gt;
&lt;br /&gt;
===Running OctoPrint===&lt;br /&gt;
OctoPrint is stated on boot. If there is a need to restart the daemon, use this command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart octoprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Refactor build system=&lt;br /&gt;
&lt;br /&gt;
Refactor uses [https://www.ansible.com/ Ansible] as the underlying framework to describe the desired system state. &lt;br /&gt;
There are many reasons for this:&lt;br /&gt;
&lt;br /&gt;
# Ansible describes the system's end state, not individual actions to perform, so it is relatively easy to port across platforms (i.e. debian, arch, BSD...)&lt;br /&gt;
# The Refactor repository can be updated from the git repository and Ansible will only change what has been updated from the previous version, not needing a complete reinstallation of the system for upgrades.&lt;br /&gt;
# Description of components is modular, making it easy to pick and choose different components for the end goal desired, while keeping each component's setup independent and reliable, and independently updatable.&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal is to have multiple decliations of Refactor, providing the user the ability to choose which firmware/software stack to run on their hardware. The following pre-build declinations are planned:&lt;br /&gt;
* '''OctoPrint, Klipper, Replicape'''&lt;br /&gt;
* '''OctoPrint, Klipper, Recore'''&lt;br /&gt;
* OctoPrint, Klipper, Toggle, Replicape&lt;br /&gt;
* OctoPrint, Klipper, Toggle, Recore&lt;br /&gt;
* Duet Web Control, Klipper, Replicape&lt;br /&gt;
* Duet Web Control, Klipper, Recore&lt;br /&gt;
* OctoPrint, Klipper, Raspberry Pi [1-3]&lt;br /&gt;
* OctoPrint, Klipper, Raspberry Pi 4 (arm64 edition)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Only the options in bold''''' have been implemented so far, while the others are undergoing various steps in development in the order shown in this list.&lt;br /&gt;
The Refactor images with OctoPrint are meant to provide drop-in replacements for the previous Umikaze images, including all the extra goodies that were present in Umikaze, like mjpg-streamer, SMB server, and usbreset for the main ones.&lt;br /&gt;
&lt;br /&gt;
The default login is ''root'' with password ''kamikaze''. The system will prompt for an immediate password change, to prevent a massive IoT exploitation through the web. Wouldn't want your printer sending out spam or starting to print unauthorized objects, now would we?&lt;br /&gt;
&lt;br /&gt;
== Building a runnable image for Replicape ==&lt;br /&gt;
&lt;br /&gt;
The [[Replicape_Rev_B | Replicape]] runs on a Beaglebone black (or green, without video output), which has a single core ARM processor running at 1GHz with 512MB of RAM. While impressive for an embedded application, it's rather weak when trying to build a system, which can take a lot of time.&lt;br /&gt;
&lt;br /&gt;
There's a significant time gain when building the image from a more powerful host system, then flashing it to memory from an SD card.&lt;br /&gt;
&lt;br /&gt;
The host system can be any ARM v7 or above architecture machine. In this example, the Raspberry Pi 4 will be used as an example, as it has a quad-core arm64 1.5GHz processor with 1 to 4GB of RAM. Any standard linux platform will do, but you will need a build storage space of at least 5GB for the build to succeed. Using a fast SD or a USB3 flash drive can provide higher disk speeds, reducing build time significantly.&lt;br /&gt;
&lt;br /&gt;
To build an image from Refactor for the Replicape, follow these steps:&lt;br /&gt;
# Browse to a folder on the pi where you wish to run the build&lt;br /&gt;
# Clone the [https://github.com/goeland86/Refactor git repository] for Refactor&lt;br /&gt;
# In the Refactor folder, run the build-image-in-chroot-end-to-end.sh script. It may take some time, so you may want to consider using a screen or byobu session to protect against network drops if you're doing so through SSH.&lt;br /&gt;
# If the build completes successfully, you should be left with a file 'Umikaze-console.img.xz'&lt;br /&gt;
# Use etcher to write the .img.xz file to a micro SD card, insert it into the Beaglebone, power it up and wait for it to power down.&lt;br /&gt;
# Start using the Refactor image on your printer&lt;br /&gt;
&lt;br /&gt;
== Installing a custom software stack with Refactor from a base Debian image ==&lt;br /&gt;
&lt;br /&gt;
At the moment Refactor only supports using a debian-based distribution as a basis. Further down the line it will be refactored so that many more packaging systems are supported - this is not an Ansible limitation, but rather simply a developer time limitation.&lt;br /&gt;
&lt;br /&gt;
The goal for Refactor is to allow the end-user to choose a custom software stack, while making installation of those packages easier. In this case, the user will want to learn how to write a simple Ansible playbook - there are multiple examples available in the Refactor base folder (build_full_klipper_octoprint.yml, install_klipper.yml, any yml file really).&lt;br /&gt;
&lt;br /&gt;
The files starting with &amp;quot;build_full_&amp;quot; are meant to be used for the image building described in the previous section. The files starting with &amp;quot;install_&amp;quot; are designed to be run on a printer platform exclusively - not on a host system.&lt;br /&gt;
&lt;br /&gt;
Each install_ file will install a specific component with its required dependencies. For instance, if you with install toggle, it will also install the Beaglebone's graphics drivers, required for video output, along with a number of libraries that Toggle is reliant on (such as a custom-built libclutter using the framebuffer output instead of the X11 driver).&lt;br /&gt;
&lt;br /&gt;
To install a specific component, make sure that you have installed ansible. Alternatively you can just run the prep_ubuntu.sh script - the only thing it does is make sure that Ansible is ready to execute any further tasks required.&lt;br /&gt;
&lt;br /&gt;
Once Ansible is installed, just run &amp;quot;ansible-playbook install_klipper.yml&amp;quot; for example. Let it run and it will go through to make sure everything is available upon the next reboot.&lt;br /&gt;
&lt;br /&gt;
After all packages have been installed as desired, reboot the system. A reboot is necessary, as depending on the software installed, kernel modules may be enabled / disabled, kernel versions may have changed etc. These are unfortunately not changes that can be done without a reboot.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=787</id>
		<title>Refactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.iagent.no/mediawiki/index.php?title=Refactor&amp;diff=787"/>
		<updated>2022-11-05T21:58:49Z</updated>

		<summary type="html">&lt;p&gt;Jon: /* Boot Recore from a USB stick using the FEL button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor header.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refactor is the next generation of controller board software stack installation.&lt;br /&gt;
&lt;br /&gt;
It is meant to simplify the lives of new users when they begin using a Thing-Printer controller board. Pre-built images of Refactor are available for users who want to get up and running quickly with Recore.&lt;br /&gt;
&lt;br /&gt;
Refactor is available in two verisons: Recore OctoPrint and Recore Mainsail, with updates being propagated simultaneously for both images. Refactor v3.0.3 has support for Replicape and only Recore with OctoPrint. &lt;br /&gt;
&lt;br /&gt;
These instructions are for version v3.1.0, for older versions:&lt;br /&gt;
* [[Refactor_v3.0.3]]&lt;br /&gt;
* [[Refactor_v3.0.2]]&lt;br /&gt;
&lt;br /&gt;
=Installing an image=&lt;br /&gt;
For instructions on making a flasher image, have a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
=Latest images=&lt;br /&gt;
The latest images for Recore and Replicape are available from github: https://github.com/intelligent-agent/Refactor/releases&lt;br /&gt;
&lt;br /&gt;
=Installed software=&lt;br /&gt;
==Recore OctoPrint==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* OctoPrint (1.7.3) https://github.com/OctoPrint/OctoPrint&lt;br /&gt;
** Octoprint Klipper (master) https://github.com/thelastWallE/OctoprintKlipperPlugin&lt;br /&gt;
** Octoprint Refactor (main) https://github.com/intelligent-agent/octoprint_refactor&lt;br /&gt;
** OctoPrint Toggle (master) https://github.com/intelligent-agent/octoprint_toggle&lt;br /&gt;
** OctoPrint Top Temp (master) https://github.com/LazeMSS/OctoPrint-TopTemp.git&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* Toggle (v1.4.1) https://github.com/intelligent-agent/toggle&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
==Recore Mainsail==&lt;br /&gt;
The Recore version is based on Armbian, Debian Buster. On top of that, Refactor comes preinstalled &lt;br /&gt;
with a stack of programs to simplify setting up a new controller board. &lt;br /&gt;
* Mainsail  (v2.1.2) https://github.com/mainsail-crew/mainsail&lt;br /&gt;
* Moonraker (master) https://github.com/Arksine/moonraker&lt;br /&gt;
* Klipper (v0.10.0) https://github.com/intelligent-agent/klipper&lt;br /&gt;
* KlipperScreen (3b4555b) https://github.com/intelligent-agent/KlipperScreen&lt;br /&gt;
* Mjpeg streamer (master)  https://github.com/xeno14/mjpg-streamer&lt;br /&gt;
* Linux (5.15.25) https://github.com/intelligent-agent/build&lt;br /&gt;
* u-boot (v2020.10) https://github.com/intelligent-agent/u-boot&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
It can be a good idea to test the board on the bench before installing it in the printer. Use the USB-C connector to power the board. &lt;br /&gt;
&lt;br /&gt;
Once the board is powered up, use a computer to access the web interface provided by OctoPrint. &lt;br /&gt;
In order to get access to OctoPrint, a network cable must be connected to the board and to a network switch. It is also possible to use a wifi dongle. &lt;br /&gt;
If a network cable is used, the board should respond to the address:&lt;br /&gt;
http://recore.local&lt;br /&gt;
&lt;br /&gt;
Once the OctoPrint interface is visible, run through the wizard to set up a new printer. &lt;br /&gt;
After the wizard is done, go to the Klipper tab in OctoPrint and edit the Klipper config file. &lt;br /&gt;
This is where the bulk of the work will happen. &lt;br /&gt;
&lt;br /&gt;
== Klipper configuration ==&lt;br /&gt;
There is a standard klipper configuration file that comes with Refactor. The configuration file is set up &lt;br /&gt;
to work out of the box, but it assumes that there is a 100 K ntc thermistor on analog inputs T0 and T3 (bed). &lt;br /&gt;
If these are not present, Klipper will halt with a warning. &lt;br /&gt;
&lt;br /&gt;
The default klipper config can be used as a starting point for building a custom config file for the printer at hand. &lt;br /&gt;
&lt;br /&gt;
After the Klipper configuration is complete, do a test print to make sure everything is working. &lt;br /&gt;
&lt;br /&gt;
=== Recore booting ===&lt;br /&gt;
Recore comes with Refactor pre-installed. &lt;br /&gt;
&lt;br /&gt;
The Recore images will need to be flashed to a USB flash drive, as there is no SD slot on the board. Recore's uboot is designed to attempt to boot from a USB drive if there is no OS on the eMMC. &lt;br /&gt;
&lt;br /&gt;
There are several stages to booting Recore, and depending on which media is installed, the boot process will &lt;br /&gt;
try and boot either from eMMC, USB host or USB device. &lt;br /&gt;
===Booting Recore from eMMC (the normal way)===&lt;br /&gt;
# Turn on power&lt;br /&gt;
# The BROM will load u-boot SPL from eMMC&lt;br /&gt;
# The u-boot SPL will load u-boot&lt;br /&gt;
# u-boot will load Linux&lt;br /&gt;
# Linux will load the rootfs from eMMC.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from eMMC, but load rootfs from USB===&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
Using a root file system on a different drive work well if the kernel version is the same on both media. &lt;br /&gt;
The kernel version has changed between Refactor v3.0.2-RC3 and v3.0.2-RC4. The board will still boot, but will not load &lt;br /&gt;
kernel modules as expected, including nft that maps OctoPrint to the HTTP port (80). &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the board is working normally and you are able to log in through ssh, but want to try out a new &lt;br /&gt;
Refactor version you can let the rootfs be loaded from a USB drive (mass storage device):&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board. &lt;br /&gt;
# Boot the board normally&lt;br /&gt;
## Open the Refactor tab in OctoPrint. &lt;br /&gt;
## Select '''run from USB'''&lt;br /&gt;
#:or&lt;br /&gt;
## Use SSH to log into the board: '''ssh root@recore.local'''&lt;br /&gt;
## Run the command '''set-boot-media usb'''&lt;br /&gt;
# Reboot&lt;br /&gt;
The board should now be have the rootfs from the USB drive.&lt;br /&gt;
&lt;br /&gt;
===Booting Recore from USB, load Linux kernel from USB drive===&lt;br /&gt;
This method requires a UART to USB adapter that can plug into a host computer. &lt;br /&gt;
There is a 4 pin header on Recore marked '''DBG''', where UART 0 is routed. All u-boot and kernel &lt;br /&gt;
messages will appear here. The baud rate is 115200. &lt;br /&gt;
If the eMMC is partitioned and has an OS, u-boot will launch right into that. In order to override that and &lt;br /&gt;
load the boot script from a USB drive, stop u-boot by pressing a key and then write:  &lt;br /&gt;
&lt;br /&gt;
# Download Refactor and flash it to a USB drive&lt;br /&gt;
# Insert the USB drive in the board and apply power&lt;br /&gt;
# When the boot process gets to u-boot, you will see: '''Hit any key to stop autoboot:  '''&lt;br /&gt;
# Hit the Any key. &lt;br /&gt;
# Then write '''run bootcmd_usb0'''&lt;br /&gt;
This will load the U-boot script from the USB drive and use the USB drive as the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Boot Recore from a USB stick using the FEL button===&lt;br /&gt;
If u-boot should be loaded from a host computer and kernel and rootfs is loaded from a USB drive:&lt;br /&gt;
# Flash the [[Reflash]] Linux distro to a USB drive. &lt;br /&gt;
# Insert the USB drive in the Recore board in one of the two host connectors close to the HDMI.&lt;br /&gt;
# Hold down the FEL button while applying power to the board via the USB-C connector.&lt;br /&gt;
# Download the Recore repository https://github.com/intelligent-agent/Recore&lt;br /&gt;
# Install the sunxi-tools program&lt;br /&gt;
# Run the fel command ('''make fel''') from the host computer. All the necessary binarys are in the Recore repository:&lt;br /&gt;
You can read more about the steps needed to boot aboard in FEL mode on the Sunxi wiki: https://linux-sunxi.org/FEL&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Depending on what linux platform you're running from, sunxi-tools will require the following dependencies to compile properly:&lt;br /&gt;
* libftd-dev&lt;br /&gt;
* libusbx-dev&lt;br /&gt;
* libudev-dev&lt;br /&gt;
(These are Debian/ubuntu names. For Fedora, change -dev to -devel)&lt;br /&gt;
&lt;br /&gt;
This should upload u-boot from the host computer to the board via the USB cable. u-boot will then boot from the connected USB drive. &lt;br /&gt;
Please note that in some instances, the USB drive is not detected as a mass storage device without also having the VIN power connector inserted. See more in [[Recore_A6#USB_connectors_not_discovered_when_powered_by_USB_device|in the &amp;quot;known errors&amp;quot; section of Recore A6]]&lt;br /&gt;
&lt;br /&gt;
==Upgrading Refactor==&lt;br /&gt;
After upgrading refactor, if the recore board is A5 or older, you can set the device tree to a different version by running the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use-recore-revision a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After a reboot, you can check that the loaded device tree matches the revision of firmware. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /sys/firmware/devicetree/base/model&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It's also worth noting that the klipper configuration is a bit different between the A5 and A6 revisions. The A6 is the now the default configuration, but A5 is also present for use. It can be found on github or on the board. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /home/debian/klipper/config/generic-recore-a5.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Debian via apt upgrade===&lt;br /&gt;
The /boot partition of Refactor is mounted Read Only, so it will have to be remounted as Read Write before running an upgrade: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from OctoPrint===&lt;br /&gt;
The only way to upgrade Refactor is by flashing a new version. In OctoPrint there is a &amp;quot;Refactor&amp;quot; plugin that can aid with this. If Refactor is run from a USB stick, a new version of can be downloaded and flashed on the eMMC.&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Refactor-tab.png|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a separate image used for upgrading Refactor. Take a look at [[Reflash]]&lt;br /&gt;
&lt;br /&gt;
===Upgrading Refactor from the command line===&lt;br /&gt;
To reboot into a USB drive: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set-boot-media usb&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Moonraker and Mainsail instead of OctoPrint==&lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mainsail.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It is possible to switch to using Mainsail as user interface to control the printer instead of OctoPrint. &lt;br /&gt;
The best way to do that is by running some install scripts on the command line: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /home/debian/install-mainsail.sh&lt;br /&gt;
sudo /home/debian/install-moonraker.sh&lt;br /&gt;
sudo enable-mainsail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that Mainsail should be available from http://recore.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info&amp;quot;&amp;gt;&lt;br /&gt;
===='''Info'''====&lt;br /&gt;
You might have to change the settings of Moonraker to allow your host computer to access the &lt;br /&gt;
user interface. Check that the IP of your host computer is allowed in the moonraker.conf&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the allowed IP range run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart moonraker.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart moonraker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using KlipperScreen instead of Toggle==&lt;br /&gt;
With version 3.0.4, KlipperScreen can be installed. Use SSH to get access to Recore, then run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install-klipperscreen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you update /home/debian/moonraker.conf to allow for 127.0.0.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/debian/moonraker.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[authorization]&lt;br /&gt;
trusted_clients:&lt;br /&gt;
  127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weston might be rotated by default. To change rotation: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/xdg/weston/weston.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The rotation should be 0&lt;br /&gt;
&lt;br /&gt;
==Recompiling and installing binaries==&lt;br /&gt;
===Update u-boot on Recore===&lt;br /&gt;
This is not something the regular user would need to do, but documented here for convenience. &lt;br /&gt;
Place u-boot-sunxi-with-spl.bin in sector 15 (8KB offset)  &lt;br /&gt;
Flash the binary &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8 conv=notrunc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: U-boot needs to be patched in order to use the eMMC as the first (and only) boot device. &lt;br /&gt;
The changes can be done in &amp;quot;spl_mmc_get_device_index&amp;quot; where dev_num should be 0 instead of 1.&lt;br /&gt;
&lt;br /&gt;
===AR100 firmware===&lt;br /&gt;
The ar100 has a binary file that is loaded on startup by klipper.service&lt;br /&gt;
The binary file comes pre-compiled in Refactor, but can be recompiled on Recore (or on a host computer).&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for ARM64====&lt;br /&gt;
The AR100 needs a cross compilation toolchain. For ARM64, it can be downloaded from feeds.iagent.no:&lt;br /&gt;
&lt;br /&gt;
http://feeds.iagent.no/toolchains/  &lt;br /&gt;
&lt;br /&gt;
The toolchain has been built with  &lt;br /&gt;
&lt;br /&gt;
https://github.com/richfelker/musl-cross-make&lt;br /&gt;
&lt;br /&gt;
GCC version: 9.2.0&lt;br /&gt;
&lt;br /&gt;
====Cross compilation toolchain for x86_64====&lt;br /&gt;
The toolchain used during automatic testing and is the same used for the CRUST firmware project: &lt;br /&gt;
&lt;br /&gt;
https://github.com/crust-firmware/crust#building-the-firmware&lt;br /&gt;
&lt;br /&gt;
====Compiling the ar100 binary====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
wget http://feeds.iagent.no/toolchains/or1k-linux-musl.tar.xz&lt;br /&gt;
tar xf or1k-linux-musl.tar.xz&lt;br /&gt;
export PATH=$PATH:/opt/output/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To configure klipper for AR100 and build the binary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper/&lt;br /&gt;
cp test/configs/ar100.config .config&lt;br /&gt;
make olddefconfig&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will produce a bin file located in out/ar100.bin, so it should be moved to /op/firmware&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv out/ar100.bin /opt/firmware/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the same operation that happens from the klipper.service script, so it can also be done by running &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====STM32 firmware====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot;&amp;gt;&lt;br /&gt;
===='''Note'''====&lt;br /&gt;
The latest Refactor now does automatic flashing of the STM32 firmware on first boot after a fresh install. This was merged with PR#199 in Refactor on Github. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The firmware for the stm32f031 mcu that is responsible for ADC &lt;br /&gt;
conversions and PWM for heaters and fans comes pre-installed in the flash of the MCU. &lt;br /&gt;
It can be recreated on the board using the Klipper build system.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/debian/klipper&lt;br /&gt;
cp test/configs/stm32f031.config .config&lt;br /&gt;
make menuconfig&lt;br /&gt;
-&amp;gt; Enable extra low-level configuration options&lt;br /&gt;
-&amp;gt; Clock Reference internal&lt;br /&gt;
-&amp;gt; Communication interface (Serial (on USART2 PA15/PA14))&lt;br /&gt;
-&amp;gt; Baud rate for serial port: 250000&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flashing STM32 firmware====&lt;br /&gt;
To flash the STM32 firmware:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp out/klipper.bin /opt/firmware/stm32.bin&lt;br /&gt;
sudo flash-stm32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replicape ===&lt;br /&gt;
&lt;br /&gt;
The Replicape images will be meant to run from the micro SD you flash it to. You cannot boot the Replicape from a USB key at this time.&lt;br /&gt;
By default, Refactor images do not flash to the eMMC the way Umikaze used to. Part of this is historical - the early betas of Refactor did not fit on the eMMC, but there's another advantage as well: it allows you to test out Refactor on an SD card while keeping your working Redeem config on the eMMC.&lt;br /&gt;
&lt;br /&gt;
==== Booting Refactor from USB ====&lt;br /&gt;
If you want to boot Refactor from a USB stick, you need to stop u-boot by pressing space during boot. &lt;br /&gt;
You must run these commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setenv bootpart 0:1; setenv oldroot /dev/sda1; setenv devnum 0; run usb_boot&lt;br /&gt;
&lt;br /&gt;
load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt; env import -t ${loadaddr} ${filesize}&lt;br /&gt;
&lt;br /&gt;
run uname_boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Klipper===&lt;br /&gt;
Klipper is run as a systemd service. It should not normally need to be restarted from the command line, but during development it can be necessary. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart klipper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The log for Klipper is located in /tmp. It can be viewed as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /tmk/klippy.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Klipper can also be restarted from the OctoPrint interface. On the &amp;quot;Klipper&amp;quot; tab, press &amp;quot;Firmware&amp;quot; to restart the Klipper firmware. &lt;br /&gt;
&amp;lt;div class=&amp;quot;res-img&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Klipper-firmware-press.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Toggle===&lt;br /&gt;
Toggle is started automatically by the systemd service toggle.service. A user is created for Toggle on first boot, but the credentials are not set until a user is created in OctoPrint. Once the wizard has been completed, the Toggle user is active, but the credentials will not be valid until OctoPrint is restarted. Therefore, if Toggle is needed, restart OctoPrint after the wizard is complete.&lt;br /&gt;
&lt;br /&gt;
===Running OctoPrint===&lt;br /&gt;
OctoPrint is stated on boot. If there is a need to restart the daemon, use this command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart octoprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Refactor build system=&lt;br /&gt;
&lt;br /&gt;
Refactor uses [https://www.ansible.com/ Ansible] as the underlying framework to describe the desired system state. &lt;br /&gt;
There are many reasons for this:&lt;br /&gt;
&lt;br /&gt;
# Ansible describes the system's end state, not individual actions to perform, so it is relatively easy to port across platforms (i.e. debian, arch, BSD...)&lt;br /&gt;
# The Refactor repository can be updated from the git repository and Ansible will only change what has been updated from the previous version, not needing a complete reinstallation of the system for upgrades.&lt;br /&gt;
# Description of components is modular, making it easy to pick and choose different components for the end goal desired, while keeping each component's setup independent and reliable, and independently updatable.&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal is to have multiple decliations of Refactor, providing the user the ability to choose which firmware/software stack to run on their hardware. The following pre-build declinations are planned:&lt;br /&gt;
* '''OctoPrint, Klipper, Replicape'''&lt;br /&gt;
* '''OctoPrint, Klipper, Recore'''&lt;br /&gt;
* OctoPrint, Klipper, Toggle, Replicape&lt;br /&gt;
* OctoPrint, Klipper, Toggle, Recore&lt;br /&gt;
* Duet Web Control, Klipper, Replicape&lt;br /&gt;
* Duet Web Control, Klipper, Recore&lt;br /&gt;
* OctoPrint, Klipper, Raspberry Pi [1-3]&lt;br /&gt;
* OctoPrint, Klipper, Raspberry Pi 4 (arm64 edition)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Only the options in bold''''' have been implemented so far, while the others are undergoing various steps in development in the order shown in this list.&lt;br /&gt;
The Refactor images with OctoPrint are meant to provide drop-in replacements for the previous Umikaze images, including all the extra goodies that were present in Umikaze, like mjpg-streamer, SMB server, and usbreset for the main ones.&lt;br /&gt;
&lt;br /&gt;
The default login is ''root'' with password ''kamikaze''. The system will prompt for an immediate password change, to prevent a massive IoT exploitation through the web. Wouldn't want your printer sending out spam or starting to print unauthorized objects, now would we?&lt;br /&gt;
&lt;br /&gt;
== Building a runnable image for Replicape ==&lt;br /&gt;
&lt;br /&gt;
The [[Replicape_Rev_B | Replicape]] runs on a Beaglebone black (or green, without video output), which has a single core ARM processor running at 1GHz with 512MB of RAM. While impressive for an embedded application, it's rather weak when trying to build a system, which can take a lot of time.&lt;br /&gt;
&lt;br /&gt;
There's a significant time gain when building the image from a more powerful host system, then flashing it to memory from an SD card.&lt;br /&gt;
&lt;br /&gt;
The host system can be any ARM v7 or above architecture machine. In this example, the Raspberry Pi 4 will be used as an example, as it has a quad-core arm64 1.5GHz processor with 1 to 4GB of RAM. Any standard linux platform will do, but you will need a build storage space of at least 5GB for the build to succeed. Using a fast SD or a USB3 flash drive can provide higher disk speeds, reducing build time significantly.&lt;br /&gt;
&lt;br /&gt;
To build an image from Refactor for the Replicape, follow these steps:&lt;br /&gt;
# Browse to a folder on the pi where you wish to run the build&lt;br /&gt;
# Clone the [https://github.com/goeland86/Refactor git repository] for Refactor&lt;br /&gt;
# In the Refactor folder, run the build-image-in-chroot-end-to-end.sh script. It may take some time, so you may want to consider using a screen or byobu session to protect against network drops if you're doing so through SSH.&lt;br /&gt;
# If the build completes successfully, you should be left with a file 'Umikaze-console.img.xz'&lt;br /&gt;
# Use etcher to write the .img.xz file to a micro SD card, insert it into the Beaglebone, power it up and wait for it to power down.&lt;br /&gt;
# Start using the Refactor image on your printer&lt;br /&gt;
&lt;br /&gt;
== Installing a custom software stack with Refactor from a base Debian image ==&lt;br /&gt;
&lt;br /&gt;
At the moment Refactor only supports using a debian-based distribution as a basis. Further down the line it will be refactored so that many more packaging systems are supported - this is not an Ansible limitation, but rather simply a developer time limitation.&lt;br /&gt;
&lt;br /&gt;
The goal for Refactor is to allow the end-user to choose a custom software stack, while making installation of those packages easier. In this case, the user will want to learn how to write a simple Ansible playbook - there are multiple examples available in the Refactor base folder (build_full_klipper_octoprint.yml, install_klipper.yml, any yml file really).&lt;br /&gt;
&lt;br /&gt;
The files starting with &amp;quot;build_full_&amp;quot; are meant to be used for the image building described in the previous section. The files starting with &amp;quot;install_&amp;quot; are designed to be run on a printer platform exclusively - not on a host system.&lt;br /&gt;
&lt;br /&gt;
Each install_ file will install a specific component with its required dependencies. For instance, if you with install toggle, it will also install the Beaglebone's graphics drivers, required for video output, along with a number of libraries that Toggle is reliant on (such as a custom-built libclutter using the framebuffer output instead of the X11 driver).&lt;br /&gt;
&lt;br /&gt;
To install a specific component, make sure that you have installed ansible. Alternatively you can just run the prep_ubuntu.sh script - the only thing it does is make sure that Ansible is ready to execute any further tasks required.&lt;br /&gt;
&lt;br /&gt;
Once Ansible is installed, just run &amp;quot;ansible-playbook install_klipper.yml&amp;quot; for example. Let it run and it will go through to make sure everything is available upon the next reboot.&lt;br /&gt;
&lt;br /&gt;
After all packages have been installed as desired, reboot the system. A reboot is necessary, as depending on the software installed, kernel modules may be enabled / disabled, kernel versions may have changed etc. These are unfortunately not changes that can be done without a reboot.&lt;/div&gt;</summary>
		<author><name>Jon</name></author>
		
	</entry>
</feed>