Support for HDSC chips (HC32F460)

thank you for the work, is this the final version? do you have anything not working? Do we need to do any hardware changes?

In this setup TMC communication fails on x axis and when homing we get a timing to close exception. Generally there is something fishy with TMC. One guy suggested to me, the soldered Hardware addresses are not correct. I did not check it yet, as i am not at home. But most probably it should be an ready verification for SteveGotthardt as my board is still mounted in the case.

I have a kobra max board v1.0.4 sitting in my lap with r44/r43 burnt out (USB doesn’t work)

Is there anything I can do to help? I really want to get klipper running on my max!

I saw the cryptic leetspeak reddit comment about the hardware addresses but the OP writes so poorly it was hard to understand what he did, he seemed to go back and edit his comment and made things even more confusing.

Am I just moving the 0 ohm resistor from 65 to 66?

I have updated the hc32f460_work branch with code that compiles and connects via serial - I don’t have the printer, just the mainboard, so I can’t test more - anyone want to give it a go? I see some have said that the uart addresses collide on the tmc.

3 Likes

I used the latest version of the code, modified the Kconfig file in the hc32f460 directory, and only modified the code here

config FLASH_START
hex
default 0x8000 if VOXELAB_AQUILA_X1
default 0xC000 if VOXELAB_AQUILA
default 0x0000 if ANYCUBIC_KOBRA

Configured to boot firmware from address 0 without bootloader.

This issue occurs.
OverflowError: can’t convert negative number to unsigned

The log is as follows:
klippy.log (16.3 KB)

Well could you check the pins for the TMC address? If i interpret the images online correctly this package should be the correct 2209:

Mainboard Pic

https://www.trinamic.com/fileadmin/assets/Products/ICs_Pinouts/TMC2209_Pinout.JPG

We would need values for MS1 and MS2 for each of the steppers, they should be hardwired. If you can confirm the Adresses for x,y and z i can look into the communication protocoll

Edit: Actually add a link to the pinout

How are you loading firmware into the board? If you use the SD card then the bootloader will put it at 0x8000 and run from there. I use SD card method with firmware.bin as only file on root and it works for me.

1 Like

See here for someone that has it working now : Voxelab Aquila HC32 Klipper ¡ GitHub

  • it does look like TMC addresses need to be changed. Anycubic seems to load values to OTP (or at least startup) and then does not read after that. Klipper reads the chips so distinct addresses are needed. So, we need to modify boards or figure how to make klipper just program only without reading - that means E0 and X (i think) will get same settings.
1 Like

Interesting, i already investigated the changes they made to the TMC library in marlin release, but those are negligible. So any marlin knowledge here? Does marlin read states at all? M122 X Y Z E does not give me any errors.

re TMC
Here is what I have figured out by popping the heatsinks off and unsoldering R65.

1 Like

From the flash 0x00 address, I am using jlink directly under the bin file. Not using sd card, directly erase bootloader data.
If I use bootloader+firmware, I can connect normally

The firmware relies on the bootloader to set up clock and dividers for clock, ram, etc. For the firmware to stand alone it needs the missing start-up code.

1 Like

Hi @SteveGotthardt, today I finally got time to test the FW.

It flashed and connected perfectly on my Kobra, but, first time I tried the “STEPPER_BUZZ STEPPER=stepper_x” it failed with “Unable to read tmc uart ‘stepper_x’ register IFCNT”.

Then I changed the UART on X from “3” to “0” and I removed the UART from the extruder. Now it is the weird part. The command “STEPPER_BUZZ STEPPER=stepper_x” works perfectly (gantry moves left and right), but, when I try to “G28 x” it gives me this weird error: “Unable to read tmc uart ‘stepper_x’ register MSCNT”.

Any idea??? :frowning:

I stopped there since I cannot home…

What those UART errors mean:

DUMP_TMC STEPPER=stepper_x
Unable to read tmc uart 'stepper_x' register OTP_READ
DUMP_TMC STEPPER=extruder
Unable to read tmc uart 'extruder' register GCONF

For me feels like both X and the E0 are different drivers (X is an 2209 and E0 is a 2208) but both are on the uart_address “0”, so, no idea how to configure that

Shared TMC uarts need unique address or select_pins polarity

no idea how to fix that

I think Marlin code only writes to the TMC (2208/2209) and doesn’t care about the addressing because Marlin does not read back the values. Klipper does read back so it needs to address each stepper chip individually. To do that you need to un-solder and move a resistor to change the address; see here: Working on getting Klipper up and running on Trigorilla_Pro_A_V1.0.4 · GitHub

1 Like

Ow, that sux :(… so, I think I will just change the board on my Kobra then. Don’t want to mod the board…

Hi, I have a Creality 2.4.s4 with the HC32F460 that I can use for testing. I’m not in the field of computer science. I may need someone to instruct me how to go about this.

Edit: BTW this board doesn’t have the TMC2208. But something that is comparable to a TMC.

Testing on going has me a bit scared…

I’m a highschool drop out who likes cad and 3d printing, not a computer hardware engineer but I could move the r65 to r66

That said, the rest of that GitHub might as well be Chinese besides “testing on going”

Can anyone give me the layman’s of where we are?

@SteveGotthardt don’t you think your code is stable enough to try to get it merged to the main Klipper code base already? :stuck_out_tongue:

I think the code is fine. It’s the Kconfig and configs that could be refined.
I’ll try a PR and see how it goes - it would be nice to get it integrated and then keep up to date with the main.

thanks for your input

1 Like