Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

STM32duino - SDIO for onboard SD card (experimental) #16756

Merged
merged 27 commits into from
Feb 4, 2020

Conversation

Bob-the-Kuhn
Copy link
Contributor

This PR adds the ability to use the SDIO module to access the onboard SD card for the boards that use the STM32duino platform/library.

This has been tested on a Black STM32F407VE board.


This should be considered experimental until tested on other boards.


ITEMS FOR DISCUSSION:

  • There is currently a soft SPI method of accessing the onboard SD card. I'm not aware of a need to have both methods. Should one be deleted? Which one?
  • The LPC176x boards have the option of accessing the onboard SD or the LCD's SD. Does that need to be included in this PR? Or a separate PR?

@Bob-the-Kuhn
Copy link
Contributor Author

Once again, I'm confused.

Hope this isn't a "never mind..."

I was assuming that all STM32F4xx boards that used the port/pin method were STM32duino but ... I see a few that already made use of SDIO_SUPPORT which was available only to the Maple/STM32GENERIC platform/library.

Wish there was a magic wand that could move all the STM32 boards to one camp or the other.

@thinkyhead
Copy link
Member

Looks pretty comprehensive. I'll have a closer look at it in the morning.

@Bob-the-Kuhn
Copy link
Contributor Author

The pinsDebug_list.h change fixes a strange compile problem I see every time I enable M43. I'm wondering if there is something strange on my PC because no one else has reported it.


All the SDIO pin defines in pins_BLACK_STM32F407VE.h are not used when SDIO_SUPPORT is defined. The SDIO pins are hard wired in the code.

I should put something in there in case there is a board that uses just the one bit SDIO mode. Right now it always puts all four data pins into SDIO mode. Some boards may use the other three for non-SDIO purposes.

@thinkyhead
Copy link
Member

thinkyhead commented Feb 3, 2020

The pinsDebug_list.h change fixes a strange compile problem

You've discovered the bug. I believe this may be caused by this file being included twice in pinsDebug.h, but I'm not really sure. The workaround I used for this was to add blocks like this to the top for pins that it complained about.

#if !PIN_EXISTS(E7_MS1)
  #undef E7_MS1_PIN
#endif

Another thing that can throw things off is if some header were to define LED_GREEN then it could get expanded by PIN_EXISTS(LED_GREEN) into –for example- "LED_D2" instead of just passing the literal string LED_GREEN resulting in "LED_D2_PIN" instead of "LED_GREEN_PIN."

@thinkyhead
Copy link
Member

Following up on the issue, I discovered that quirks in the way C++ macros get expanded makes PIN_EXISTS susceptible to early expansion. In this example the expansion is bad:

#define MY_COOL 666
#define MY_COOL_PIN 123
#if PIN_EXISTS(MY_COOL)
  #error "The line above will throw an error."
#endif

This is because MY_COOL is getting expanded early. There are ways to suppress symbol expansion in macros, but the only way to make PIN_EXISTS immune was to revert it to a simpler form. This simplifies the pinsDebug_list.h file a lot, allowing us to remove a lot of #undef lines that were there to work around the issue.

1) ALL macro wasn't working so replaced it with lowere level macros.

2) corrected pin names so they matched those used in Sd2Card_sdio_stm32duino.cpp
@Bob-the-Kuhn
Copy link
Contributor Author

Bob-the-Kuhn commented Feb 4, 2020

commit 0280624 changes:

  • Sd2Card_sdio_stm32duino.cpp - added guard to make sure this module only compiles if ST's STM32 library/platform is used.
  • pins.h & boards.h - 1) complete BTT name change and 2) add/correct environments where obvious
  • pins_BLACK_STM32F407VE.h - changed so that SDIO mode is not used if LCD or CUSTOM_CABLE options are selected
  • pins_STEVAL_3DP001V1.h & pins_FLYF407ZG.h - added SDIO support
  • pins_BTT_SKR_PRO_V1_1.h - added soft SPI support for the onboard SD card. SDIO is not connected to the SD card connector on this board.
  • pins_ARMED.h - added link to web site. I had a devil of a time finding info on this board so I figured this might save time for someone else.

There are only three boards that can make use of the new module. I've been able to test on two of them.

Here's a list of all the current STM32F4 and STM32F7boards in Marlin along with my notes:

      BOARD                   PLATFORM      NOTES
                           
    BOARD_ARMED               STM32duino    no onboard SD
    BOARD_BLACK_STM32F407VE   STM32duino    tested
    BOARD_BTT_BTT002_V1_0     STM32duino    SDIO not supported in hardware
    BOARD_BTT_GTR_V1_0        STM32duino    SDIO not supported in hardware
    BOARD_BTT_SKR_PRO_V1_1    STM32duino    SDIO not supported in hardware
    BOARD_FLYF407ZG           STM32duino    not tested
    BOARD_FYSETC_S6           STM32duino    no onboard SD
    BOARD_RUMBA32             STM32duino    no onboard SD
    BOARD_STEVAL_3DP001V1     STM32duino    tested                         

    BOARD_THE_BORG            STM32GENERIC  
    BOARD_VAKE403D            STM32GENERIC  
    BOARD_STM3R_MINI          STM32GENERIC
    BOARD_CHITU3D             STM32GENERIC
    
    BOARD_MKS_ROBIN2          no environment
    BOARD_LERDGE_X            STM32GENERIC  
    BOARD_LERDGE_K            STM32GENERIC  
    BOARD_GENERIC_STM32F4     STM32GENERIC  

@Bob-the-Kuhn
Copy link
Contributor Author

I think this PR is ready to be merged. I have no further features to add and all boards that can make use of this have been updated.

@ManuelMcLure
Copy link
Contributor

commit 0280624 changes:

Line 391 of pins.h:

#elif (MB(BIGTREE_SKR_V1_4_TURBO) || MB(TT_SKR_V1_4_TURBO))

I think the second should be BTT_SKR_V1_4_TURBO (missing the B)

@Bob-the-Kuhn
Copy link
Contributor Author

pins.h has been corrected.

@jmz52
Copy link
Contributor

jmz52 commented Feb 4, 2020

Great work!
My two coppers is to use #if defined(HAL_SD_MODULE_ENABLED) as a safeguard for sdio code and prerequisite for SDIO_SUPPORT if HAL_STM32 is used

@thinkyhead
Copy link
Member

Rather than keep two names for boards, I've changed it to standardize on the shorter name variant for all boards.

@thinkyhead thinkyhead merged commit 0268c1d into MarlinFirmware:bugfix-2.0.x Feb 4, 2020
@xC0000005
Copy link
Contributor

BOARD_CHITU3D STM32GENERIC
BOARD_LERDGE_X STM32GENERIC
BOARD_LERDGE_K STM32GENERIC

These three should be using STM32DUINO. I'll see if I can get them building with this soon.

@BastR
Copy link
Contributor

BastR commented Feb 5, 2020

So if I understand with my limited knowledge, I should be able to access the onboard SD card on a SKR PRO? because I just flashed and I still don't have access to the onboard SD card :(.

SKR PRO with TMC5160 driver and full graphic smart controller

@Bob-the-Kuhn
Copy link
Contributor Author

@BastR - you should be able to access the onboard SD card if are you are NOT using a SPI based LCD.

Make sure you have the following setup:

Configuration.h
    #define SDSUPPORT
    #define SD_CHECK_AND_RETRY
CONFIGURATION_adv.h
    #define SDCARD_CONNECTION ONBOARD

If this doesn't fix it then open an issue and do the following:

  1. Capture the result of issuing a M20 command
  2. ZIP and post the following:
  • The capture
  • Configuration.h
  • CONFIGURATION_adv.h
  • pins_BTT_SKR_PRO_V1_1.h

@Keltere
Copy link

Keltere commented Mar 4, 2020

Like written in this comment on skr pro 1.1 it isn't working if there is even a check of the spi lcd presence.
Some code must be removed in the pin file in order to make it work but still it won't mount the sdcard on either windows or linux.

@thinkyhead
Copy link
Member

thinkyhead commented Mar 6, 2020

if there is even a check of the SPI LCD presence

Marlin only looks for hardware for which support has been specifically compiled in. If Marlin is compiled for an i2c LCD or no LCD it doesn't do any checking for SPI LCDs.

StJa added a commit to StJa/Marlin that referenced this pull request Mar 9, 2020
* Add sanity-check for new Advanced Pause option

Followup to MarlinFirmware#16372

* Include macros for delta ABC

* Update Russian language (MarlinFirmware#16745)

* Fix BTT SKR 1.4 extra endstop pins (MarlinFirmware#16738)

* Option for Trigorilla 1.4 with add-on endstops board (MarlinFirmware#16737)

* Consistent M112 with Emergency Parser (MarlinFirmware#16747)

* Improve mfadd helper script

- Use the original branch name if none is supplied
- Set the remote tracking to the source
- Accept User/Branch or User:Branch syntax

* Clean up i2c encoder, sanitize serial

* Misc cleanup, whitespace

* Encapsulate probe as singleton class (MarlinFirmware#16751)

* G34 automatic point assignment (MarlinFirmware#16473)

* Fix Temperature::over_autostart_threshold (MarlinFirmware#16749)

* Update Russian language (MarlinFirmware#16750)

* Fix CURRENT_STEP_DOWN compile error

* Drop obsolete SD special char handling

See MarlinFirmware#14035

* Probe singleton patch

Followup to MarlinFirmware#16751

* Fix RGB / Neopixel white color bug

See MarlinFirmware#16752

* Suppress a compile warning

* More 8-extruder fixups

* Add EXP labels to SKR pins

* Fix LPC build with USE_WATCHDOG off

* Minor string storage optimization

* Apply REPEAT, RREPEAT, and loop macros (MarlinFirmware#16757)

* Revert breaking change to _FAN_PWM macro

* Add Z_AFTER_HOMING to raise Z more in G28 (MarlinFirmware#16755)

* Corner Leveling: Add inset for each side (MarlinFirmware#16759)

* (c) 2020

* Tweak mfqp script

* Use a different Configurations branch for CI

* Fix LCD Z Move character LCD display line (MarlinFirmware#16772)

* Fix warning for ESP32 (MarlinFirmware#16771)

* [cron] Bump distribution date

* Force T0 in UBL G29 on all multi-hotend setups (MarlinFirmware#16774)

* Keep secure credentials in a separate config file (MarlinFirmware#16773)

* STM32duino - Use SDIO for onboard SD (MarlinFirmware#16756)

* Fix E stepper stays on bug

Fixes MarlinFirmware#16753

* Fix Arduino IDE compile for DUE

Fixes MarlinFirmware#16767

* Fix CALIBRATION_GCODE pin handling

* Upgrade an ifdef

* More updates for 8 extruders, REPEAT

* [cron] Bump distribution date (2020-02-05)

* Add MKS Base 1.6 board (MarlinFirmware#16783)

* Direct download link for configs

* [cron] Bump distribution date (2020-02-06)

* Split up MKS_RUMBA32 into two variants (MarlinFirmware#16781)

* G26: Allow to set retraction for UBL mesh test (MarlinFirmware#16511)

* Remove extraneous Serial init (MarlinFirmware#16794)

* Fix probe with multi-endstops (MarlinFirmware#16793)

* [cron] Bump distribution date (2020-02-07)

* [cron] Bump distribution date (2020-02-08)

* Clean up Makefle indentation

* Add .editorconfig file

* Tweak ABL logging, document probing

* [cron] Bump distribution date (2020-02-09)

* Coolstep for TMC2130, 2209, 5130, 5160 (MarlinFirmware#16790)

* Better probe fail handling (MarlinFirmware#16811)

* Adafruit Grand Central M4 fixes (MarlinFirmware#16812)

* Minor HAL cleanup

* Move MSG_MARLIN

* Show print time with PRINTER_EVENT_LEDS

* Tweak parser warning

* Bump config version to 020004 (MarlinFirmware#16816)

* Add PID, probe offsets to ExtUI (MarlinFirmware#16792)

* [cron] Bump distribution date (2020-02-10)

* Tweak LPC1768 upload py script

* Add mftest -b (auto-build) and -u (upload)

- Implement the equivalent of auto-build for the shell environment by using the MOTHERBOARD setting to look up the env: entries.

* Revert change to AXIS_DRIVER_TYPE_X2

- Revisit this to figure out why it breaks

* Revert "Coolstep for TMC2130, 2209, 5130, 5160"

Reverting MarlinFirmware#16790 as not ready for primetime.

* Add a caution to drivers.h

* Update MKS BASE and v1.6 pins (MarlinFirmware#16806)

* Add g-code quoted strings, improve stream code (MarlinFirmware#16818)

* Fix out-of-order M0 after SD printing

Fixes MarlinFirmware#14774

Co-Authored-By: tol2cj <[email protected]>

* Fix out-of-order M0 after SD printing

Fixes MarlinFirmware#14774

Co-Authored-By: tol2cj <[email protected]>

* Enable hotend / bed PID separately in ExtUI (MarlinFirmware#16827)

* Fix MKS Robin Nano platformio.ini entry (MarlinFirmware#16826)

* Unify step pulse timing of ISR / babystep (MarlinFirmware#16813)

* [cron] Bump distribution date (2020-02-11)

* Update SAMD51 EEPROM repo link (MarlinFirmware#16832)

* Undo driver type auto-assignment for now

Good general concept but needs more time to develop and group with a stepper suite.

* No Z sensorless req'd if homing with probe

Fixes MarlinFirmware#16674

* Recommend Z Safe Homing

Co-Authored-By: Vertabreaker <[email protected]>

* Use prior babystep delay method (MarlinFirmware#16833)

* Function-style critical section macros

* Fix up tests

* Simplify old safe homing sanity check

* Prevent pin glitches on out commutation (MarlinFirmware#16835)

Better for switching from pulled input to output and also set real output (with no input enabled).

* [cron] Bump distribution date (2020-02-12)

* Define MarlinSerial instances for DGUS (MarlinFirmware#16841)

* No limit needed on this raise

Remove an extraneous limit from MarlinFirmware#16811.

* [cron] Bump distribution date (2020-02-13)

* [cron] Bump distribution date (2020-02-14)

* Fix G-code line parsing (MarlinFirmware#16840)

* Ping the job timer in M140 (MarlinFirmware#16849)

* Remove unused queue.stopped_N (MarlinFirmware#16850)

* Don't assert safe homing for delta/scara

* Fix ESP32 warning, specify supported version

* Add ESPAsyncTCP to lib_ignore (MarlinFirmware#16844)

* Add RAMPS 1.4.4 to AGCM4 (MarlinFirmware#16606)

* Clean up host actions code (MarlinFirmware#16856)

* Optimize "Dismiss" string

* Clean up stepper and babystep (MarlinFirmware#16857)

* Fysetc S6 pins / LCD updates (MarlinFirmware#16830)

* [cron] Bump distribution date (2020-02-15)

* Fix mftest -b and -u. Add --help.

* Fix a BORG compile warning

* Fix byte-to-percent display

Fixes MarlinFirmware#16866

* Conceal float rounding errors on display

Fix MarlinFirmware#16866

* [cron] Bump distribution date (2020-02-16)

* Double ADC read frequency (MarlinFirmware#16864)

* EXPERIMENTAL integrated BABYSTEPPING (MarlinFirmware#16829)

* Show '*' for zero 'stst' flag

* Require TMCStepper 0.6.2

* Defer updated ADC

* Move SAMD51 Temperature timer to RTC (MarlinFirmware#16868)

* Fix unknown command on empty lines (MarlinFirmware#16867)

* Fix mftest -b -u line match

* Update French language (MarlinFirmware#16877)

* Put ESP32 I2S stepper task and Marlin on the same core (MarlinFirmware#16874)

* Fix babystep include, typos in stepper.cpp

Fix MarlinFirmware#16881

* [cron] Bump distribution date (2020-02-17)

* [cron] Bump distribution date (2020-02-18)

* [cron] Bump distribution date (2020-02-19)

* [cron] Bump distribution date (2020-02-20)

* Serial redirect for Move Command when stopping (MarlinFirmware#16906)

* [cron] Bump distribution date (2020-02-21)

* Single envs for specific boards

* Inline manage_inactivity, tweak autoreport_paused

* Function for CONFIG_ECHO_HEADING

* Show end prompt with Print Event LEDs

* Add a note on EEPROM todo

* Tweak process_line_done for speed

* More EEPROM cleanup

* Followup to autoreport patch (MarlinFirmware#16914)

See a1f026f

* Disable spreadcycle in tmc_enable_stallguard<2209> (MarlinFirmware#16890)

* Fix EEPROM errors with EXTRUDERS == 0 (MarlinFirmware#16898)

* Add PICA shields support (MarlinFirmware#16891)

* Tweak pins spacing, comments

* Version 2.0.4 Release

* [cron] Bump distribution date (2020-02-22)

* Use moves_free in ok_to_send

* Hotfix for Babystepping

* CoreXY Babystepping hotfix

* Use moves_free in ok_to_send

* [cron] Bump distribution date (2020-02-22)

* Hotfix for Babystepping

* [ESP32] Allow user to define pins for hardware Serial1 and Serial2 (MarlinFirmware#16918)

* CoreXY Babystepping hotfix

* Version 2.0.4.1 Release

* [cron] Bump distribution date (2020-02-23)

* Finish Custom User Menu sanity-check (MarlinFirmware#16917)

* Followup to babystep hotfix

* Fix M0/M1 broken wait loop (MarlinFirmware#16921)

* Define ANET_FULL_GRAPHICS_LCD pins for SKR 1.4 (MarlinFirmware#16928)

* Version 2.0.4.2 Release

* Suppress "packed member" warning

* Suppress "packed member" warning

* Commit last SD line before fileHasFinished

* Allow LCD_PIXEL_WIDTH/HEIGHT override

* Allow USE_GCODE_SUBCODES for debugging

* Sync Italian language (MarlinFirmware#16935)

* Reduce default TMC baudrate to 57600 with Software Serial (MarlinFirmware#16930)

* [cron] Bump distribution date (2020-02-24)

* Fix AXIS_HAS_SW_SERIAL

* Simplified E_AXIS_HAS macro

* "Init. Media" => "Attach Media"

* Fix Babystepping loop (again)

* BS_TOTAL_AXIS => BS_TOTAL_IND

* Allow Z_SAFE_HOMING_POINT outside bed (MarlinFirmware#16945)

* Restore tabs in Makefile (MarlinFirmware#16944)

* Fix card_eof error

* Version 2.0.4.3 Release

* Allow Z_SAFE_HOMING_POINT outside bed (MarlinFirmware#16945)

* Restore tabs in Makefile (MarlinFirmware#16944)

* Fix card_eof error

* [cron] Bump distribution date (2020-02-25)

* Update POWER_LOSS_PIN comment (MarlinFirmware#16957)

* Update Italian language (MarlinFirmware#16947)

* Fix LCD cutter/bed icons overlapping (MarlinFirmware#16956)

* Fix SKR 1.4 Turbo SD_DETECT_PIN (MarlinFirmware#16955)

* Fix the wait loop in M0 / M1

* [cron] Bump distribution date (2020-02-26)

* Ensure proper SD print completion (MarlinFirmware#16967)

* HAS_SDCARD_CONNECTION is more obsolete

* Fix GTR10 overlapping defines (MarlinFirmware#16976)

* Toolchange improvements (MarlinFirmware#16979)

* Language: "failsafe" => "Defaults"

* Use a STR_ prefix for non-translated strings

* Set LCD status for EEPROM errors (MarlinFirmware#16977)

* More serial strings

* Add LPC1768 Serial ports for pinsDebug (MarlinFirmware#16980)

* Correct SKR expansion port pins (MarlinFirmware#16974)

* String optimize followup

* Fix Trinamic pulse rate auto-assignment (MarlinFirmware#16966)

* Allow weird probe values in G33

* Serial strings in macros

* Sanity check for LPC serial pin conflict (MarlinFirmware#16981)

* Allow servo features in combination (MarlinFirmware#16960)

* Add TRAVEL_EXTRA_XYJERK option

See MarlinFirmware#16949

Co-Authored-By: josedpedroso <[email protected]>

* Quick-homing sensorless back-off (MarlinFirmware#16872)

* Prevent park_point compile error

* More extra travel jerk changes

Co-Authored-By: josedpedroso <[email protected]>

* Fix unified status bed temp display

* Allow print recovery after parking

* Case-insensitive g-code option (MarlinFirmware#16932)

* Define DIAG pins for MKS SGen-L

* Handle print completed LED event in M0

* [cron] Bump distribution date (2020-02-27)

* Fix planner.cpp compile (MarlinFirmware#16996)

* Update Slovak language (MarlinFirmware#17002)

* Version 2.0.4.4 Release

Co-authored-by: Scott Lahteine <[email protected]>
Co-authored-by: Acenotass <[email protected]>
Co-authored-by: rebel1 <[email protected]>
Co-authored-by: Jason Smith <[email protected]>
Co-authored-by: Scott Lahteine <[email protected]>
Co-authored-by: InsanityAutomation <[email protected]>
Co-authored-by: ellensp <[email protected]>
Co-authored-by: felixstorm <[email protected]>
Co-authored-by: Bob Kuhn <[email protected]>
Co-authored-by: thisiskeithb <[email protected]>
Co-authored-by: Tanguy Pruvot <[email protected]>
Co-authored-by: Robby Candra <[email protected]>
Co-authored-by: Robert Stein <[email protected]>
Co-authored-by: Fabio Santos <[email protected]>
Co-authored-by: Giuliano Zaro <[email protected]>
Co-authored-by: Daniel Mazurkiewicz <[email protected]>
Co-authored-by: tol2cj <[email protected]>
Co-authored-by: proferabg <[email protected]>
Co-authored-by: darksiah <[email protected]>
Co-authored-by: Vertabreaker <[email protected]>
Co-authored-by: Gaston Dombiak <[email protected]>
Co-authored-by: vivian-ng <[email protected]>
Co-authored-by: George Fu <[email protected]>
Co-authored-by: Karl Andersson <[email protected]>
Co-authored-by: Jamie <[email protected]>
Co-authored-by: ZMiguel Alves <[email protected]>
Co-authored-by: Marcio T <[email protected]>
Co-authored-by: josedpedroso <[email protected]>
Co-authored-by: Makoto Schoppert <[email protected]>
Co-authored-by: Roman Moravčík <[email protected]>
@Bob-the-Kuhn Bob-the-Kuhn deleted the black-2020-01-29 branch June 3, 2022 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants