klipper icon indicating copy to clipboard operation
klipper copied to clipboard

rp2040: fix hang on startup on Twotrees SK1 toolhead board

Open grafalex82 opened this issue 1 year ago • 3 comments

After upgrading to recent Klipper, the Twotrees SK1 toolhead's microcontroller does not boot normally. In most of the cases it hangs during startup, or falls into HardFault exception.

Using the onboard LED connected to GPIO23, setting it to on/off in different places of the initialization code it was found that the issue happens around configuring the PLLs. Moreover, adding a small delay at the end of pll_setup() function fixes the issue, and the board boots normally.

Notes:

  • I understand that adding a raw delay looks suspicious - I am open for ideas how to make this in a more elegant way. In the meantime I tried using udelay() from generic/armcm_timer.c, but it does not compile for rp2040.
  • I also tried to use while (!(pll->cs & PLL_CS_LOCK_BITS)) similar to the loop above, but it does not fix the issue.
  • I checked with the datasheet, but it does not indicate necessity of any waits here, but adding waits definitely improves the situation.

grafalex82 avatar Apr 18 '24 20:04 grafalex82

Thank you for submitting a PR, pleas refer to point 3 in "What to expect in a review" in https://github.com/Klipper3d/klipper/blob/master/docs/CONTRIBUTING.md and provide a signed off by line.

Thanks James

JamesH1978 avatar Apr 18 '24 22:04 JamesH1978

@grafalex82 I had similar issues on some custom boards that I have made. In my case, it turned out to be due to the flash not booting correctly. I had created a fix for that issue on this branch of my fork https://github.com/amken3d/klipper/tree/rp2040-add-support-for-additional-flash-chips. You can try it and see if it helps you.

amken3d avatar Apr 24 '24 14:04 amken3d

Thank you for your contribution to Klipper. Unfortunately, a reviewer has not assigned themselves to this GitHub Pull Request. All Pull Requests are reviewed before merging, and a reviewer will need to volunteer. Further information is available at: https://www.klipper3d.org/CONTRIBUTING.html

There are some steps that you can take now:

  1. Perform a self-review of your Pull Request by following the steps at: https://www.klipper3d.org/CONTRIBUTING.html#what-to-expect-in-a-review If you have completed a self-review, be sure to state the results of that self-review explicitly in the Pull Request comments. A reviewer is more likely to participate if the bulk of a review has already been completed.
  2. Consider opening a topic on the Klipper Discourse server to discuss this work. The Discourse server is a good place to discuss development ideas and to engage users interested in testing. Reviewers are more likely to prioritize Pull Requests with an active community of users.
  3. Consider helping out reviewers by reviewing other Klipper Pull Requests. Taking the time to perform a careful and detailed review of others work is appreciated. Regular contributors are more likely to prioritize the contributions of other regular contributors.

Unfortunately, if a reviewer does not assign themselves to this GitHub Pull Request then it will be automatically closed. If this happens, then it is a good idea to move further discussion to the Klipper Discourse server. Reviewers can reach out on that forum to let you know if they are interested and when they are available.

Best regards, ~ Your friendly GitIssueBot

PS: I'm just an automated script, not a human being.

github-actions[bot] avatar May 09 '24 00:05 github-actions[bot]