External SD card implementation possibilities

Hi All. I’m playing around with the external SD card with the smoothie, but I have some needs for clarification.
As a premise, I already know about the warning to avoid using the external sd card as gcode source due to EMC problem or data corruption and boot “problems”, but my idea is to build a small “shield” to be mounted directly over the board (quite like the universal adapter board for display) where the SD card (not micro) socket will be available and the panel can be connected with a different flat cable. In this way the External SD will be very close to the board and with a dedicated PCB it is possible to improve noise immunity with dedicated ground plane and so on.

My problem is that I have some difficulties to make the Ext SD work as a secondary SD and want to summarize which can be the possible or best solution to be implemented.

My desire is to have my printer usable both connected to PC (via USB interface or network by uploading the gcode to the internal microSD) and as stand alone machine, by having the file on a normal SD and use it directly (like most of the marlin/ramps/reprap machine configurations) avoiding the need to work by removing and inserting the internal microSD.
The idea is to expose only the standard SD card to the user on the front side of the machine.

Solution (A)
» External SD card on SPI channel 0
» LCD Display on SPI channel 0

My config for this:

# Panel
panel.enable                    true            # set to true to enable the panel code
panel.lcd                       viki2           # set type of panel
panel.encoder_a_pin             3.25!^          # encoder pin
panel.encoder_b_pin             3.26!^          # encoder pin
panel.a0_pin                    1.23            # Adafruit Negative Panel st7565 needs an a0
panel.rst_pin                   1.22            # Adafruit Negative Panel st7565 needs an rst
panel.contrast                  30                # Adafruit Negative Panel st7565 Contrast    
panel.click_button_pin          2.11!^            # encoder click
panel.spi_channel               0               # spi channel to use  
panel.spi_cs_pin                0.16            # spi chip select

panel.external_sd true #enable external_sd
panel.external_sd.spi_channel 0 #Set the SPI channel the external SD card is on
panel.external_sd.spi_cs_pin 1.31 #Set the CS ( Chip Select ) pin for the external SD card
panel.external_sd.sdcd_pin 1.30!^ #SD card detect signal pin

Solution (B)
» External SD card on SPI channel 1
» LCD Display on SPI channel 0

My config for this:

# Panel
panel.enable                    true            # set to true to enable the panel code
panel.lcd                       viki2           # set type of panel
panel.encoder_a_pin             3.25!^          # encoder pin
panel.encoder_b_pin             3.26!^          # encoder pin
panel.a0_pin                    1.23            # Adafruit Negative Panel st7565 needs an a0
panel.rst_pin                   1.22            # Adafruit Negative Panel st7565 needs an rst
panel.contrast                  30                # Adafruit Negative Panel st7565 Contrast    
panel.click_button_pin          2.11!^            # encoder click
panel.spi_channel               0               # spi channel to use  
panel.spi_cs_pin                0.16            # spi chip select

panel.external_sd true #enable external_sd
panel.external_sd.spi_channel 1 #Set the SPI channel the external SD card is on
panel.external_sd.spi_cs_pin 1.31 #Set the CS ( Chip Select ) pin for the external SD card
panel.external_sd.sdcd_pin 1.30!^ #SD card detect signal pin

Solution (C)
» External SD card on SPI channel 1 duplicating the microSD socket (same CS) -> microSD never used, use SD card instead, so no external_sd config, but only hardware connection
» LCD Display on SPI channel 0

My config for this:

# Panel
panel.enable                    true            # set to true to enable the panel code
panel.lcd                       viki2           # set type of panel
panel.encoder_a_pin             3.25!^          # encoder pin
panel.encoder_b_pin             3.26!^          # encoder pin
panel.a0_pin                    1.23            # Adafruit Negative Panel st7565 needs an a0
panel.rst_pin                   1.22            # Adafruit Negative Panel st7565 needs an rst
panel.contrast                  30                # Adafruit Negative Panel st7565 Contrast    
panel.click_button_pin          2.11!^            # encoder click
panel.spi_channel               0               # spi channel to use  
panel.spi_cs_pin                0.16            # spi chip select

These are my questions for each solution:

Solution (A):
This seems pretty straightforward to me, but I have concern about sharing the same spi for a diplay and the sd considering that I want the best performance of gcode reading from the sdcard.
Do you think the “traffic” on the LCD spi side can impact on the sdcard perfomance?

Solution (B):
The LCD is left alone on its channel; the microSD and the external share the same “bus”, but I expect that (apart from the boot phase) only one sd at a time was used for gcode reading during print so it seems optimal.
In this configuration I’ll never be able to make the external_sd work; I don’t see it in the “play” menù, why?
Ho can I refresh the SD card content if it is not possible to insert it at boot time?
From an user point of view, this solution can be useful because the external sd can be “formatted” and does not need to contain the Config.txt file, but has a drawback it can be annoying to remove the SD to boot up the machine.

Solution (C):
This is the easiest solution also from an hardware point of view, but has two drawbacks in my opinion:

  1. The SD card need to be inserted at boot, otherwise the machine does not boot up (opposite of previous one).
  2. The SD must contain, at least, the config.txt file; if a user accidentally delete this file, the machine does not boot up. Is it possible to include the config file at compile time in order to avoid to expose it to the final user? The machine that we build will have a defined configuration that we decide and the user does not need (and also not allowed) to change machine parameters (acceleration, step rate etc…)

Thank you for your patience, I hope you can help me identify the best solution.
Which one do you prefer for a machine targeted at an end user?

Imported from wikidot