diff --git a/litex_boards/platforms/gsd_butterstick.py b/litex_boards/platforms/gsd_butterstick.py index 9507864..c3d6e34 100644 --- a/litex_boards/platforms/gsd_butterstick.py +++ b/litex_boards/platforms/gsd_butterstick.py @@ -37,6 +37,25 @@ _io_r1_0 = [ IOStandard("LVCMOS33") ), + + # SDCard + ("spisdcard", 0, + Subsignal("clk", Pins(f"B15")), + Subsignal("mosi", Pins(f"A13"), Misc("PULLMODE=UP")), + Subsignal("cs_n", Pins(f"A14"), Misc("PULLMODE=UP")), + Subsignal("miso", Pins(f"C12"), Misc("PULLMODE=UP")), + Misc("SLEWRATE=FAST"), + IOStandard("LVCMOS33"), + ), + ("sdcard", 0, + Subsignal("data", Pins("C12 A12 D14 A14"), Misc("PULLMODE=UP")), + Subsignal("cmd", Pins("A13"), Misc("PULLMODE=UP")), + Subsignal("clk", Pins("B13")), + Subsignal("cd", Pins("B15")), + Misc("SLEWRATE=FAST"), + IOStandard("LVCMOS33"), + ), + # DDR3 SDRAM ("ddram", 0, Subsignal("a", Pins( diff --git a/litex_boards/targets/gsd_butterstick.py b/litex_boards/targets/gsd_butterstick.py index 1fe845c..6a3979e 100755 --- a/litex_boards/targets/gsd_butterstick.py +++ b/litex_boards/targets/gsd_butterstick.py @@ -8,7 +8,7 @@ # SPDX-License-Identifier: BSD-2-Clause # Build/Use: -# ./gsd_butterstick.py --uart-name=crossover --with-etherbone --with-spi-flash --csr-csv=csr.csv --build --load +# ./gsd_butterstick.py --uart-name=crossover --with-etherbone --csr-csv=csr.csv --build --load # litex_server --udp # litex_term bridge @@ -159,6 +159,9 @@ def main(): parser.add_argument("--eth-ip", default="192.168.1.50", help="Ethernet/Etherbone IP address") parser.add_argument("--eth-dynamic-ip", action="store_true", help="Enable dynamic Ethernet IP addresses setting") parser.add_argument("--with-spi-flash", action="store_true", help="Enable SPI Flash (MMAPed)") + sdopts = parser.add_mutually_exclusive_group() + sdopts.add_argument("--with-spi-sdcard", action="store_true", help="Enable SPI-mode SDCard support") + sdopts.add_argument("--with-sdcard", action="store_true", help="Enable SDCard support") builder_args(parser) soc_core_args(parser) trellis_args(parser) @@ -177,6 +180,10 @@ def main(): eth_dynamic_ip = args.eth_dynamic_ip, with_spi_flash = args.with_spi_flash, **soc_core_argdict(args)) + if args.with_spi_sdcard: + soc.add_spi_sdcard() + if args.with_sdcard: + soc.add_sdcard() builder = Builder(soc, **builder_argdict(args)) builder_kargs = trellis_argdict(args) if args.toolchain == "trellis" else {} builder.build(**builder_kargs, run=args.build)