Ok folks this is the skinny on how this works. This topic has come up many times.
There is some goofy handling of the SPI bus in micropython
In order to share the pins and the host that are used must be identical. Well all except the CS pin that has to be different
The CS pin is what selects the device so it can communicate on the bus.
The SPI host used in the binding for the display drivers is NOT host 1 = SPI 1 and host 2 = SPI 2.
0 = SPI 1
1 = SPI 2
2 = SPI 3
Machine.SPI uses 1, 2 and 3. Internally it subtracts 1 from the passed in host number.
Machine.SDCard works even funkier. You have to add 2 to the real SPI host number.
Host 2 is always a safe bet to use. So to make it work this is what you have to pass as the host
Display driver: 1
Machine.SPI: 2
Machine.SDCard: 3
Those are all SPI2.
Now if you are using an SD card and something like the touch you may have problems. While you are transferring from anything other than the display it is best to turn off the the isr that handles calling the task handler. This can be done by importing lv_utils and in that module is a class that you can used to get the running handler and you can shut it down.