Решил подключить к Microblaze SD/MMC карточку по SPI интерфейсу.
Часть MHS файла с описание SPI:
Код
BEGIN xps_spi
PARAMETER INSTANCE = xps_spi_0
PARAMETER HW_VER = 2.02.a
PARAMETER C_SCK_RATIO = 16
PARAMETER C_NUM_TRANSFER_BITS = 8
PARAMETER C_BASEADDR = 0x83400000
PARAMETER C_HIGHADDR = 0x8340ffff
BUS_INTERFACE SPLB = mb_plb
PORT IP2INTC_Irpt = xps_spi_0_IP2INTC_Irpt
PORT SCK = xps_spi_0_SCK
PORT MISO = xps_spi_0_MISO
PORT MOSI = xps_spi_0_MOSI
PORT SS = xps_spi_0_SS
END
PARAMETER INSTANCE = xps_spi_0
PARAMETER HW_VER = 2.02.a
PARAMETER C_SCK_RATIO = 16
PARAMETER C_NUM_TRANSFER_BITS = 8
PARAMETER C_BASEADDR = 0x83400000
PARAMETER C_HIGHADDR = 0x8340ffff
BUS_INTERFACE SPLB = mb_plb
PORT IP2INTC_Irpt = xps_spi_0_IP2INTC_Irpt
PORT SCK = xps_spi_0_SCK
PORT MISO = xps_spi_0_MISO
PORT MOSI = xps_spi_0_MOSI
PORT SS = xps_spi_0_SS
END
Часть DTS файла с описание SPI в котором описан MMC:
Код
xps_spi_0: spi@83400000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "xlnx,xps-spi-2.02.a", "xlnx,xps-spi-2.00.a";
interrupt-parent = <&xps_intc_0>;
interrupts = < 4 2 >;
reg = < 0x83400000 0x10000 >;
xlnx,family = "spartan3adsp";
xlnx,fifo-exist = <0x1>;
xlnx,num-ss-bits = <0x1>;
xlnx,num-transfer-bits = <0x8>;
xlnx,sck-ratio = <16>;
mmc-slot@0 {
compatible = "mmc-spi-slot";
reg = <0>;
voltage-ranges = <3300 3300>;
spi-max-frequency = <3906250>;
};
};
#address-cells = <1>;
#size-cells = <0>;
compatible = "xlnx,xps-spi-2.02.a", "xlnx,xps-spi-2.00.a";
interrupt-parent = <&xps_intc_0>;
interrupts = < 4 2 >;
reg = < 0x83400000 0x10000 >;
xlnx,family = "spartan3adsp";
xlnx,fifo-exist = <0x1>;
xlnx,num-ss-bits = <0x1>;
xlnx,num-transfer-bits = <0x8>;
xlnx,sck-ratio = <16>;
mmc-slot@0 {
compatible = "mmc-spi-slot";
reg = <0>;
voltage-ranges = <3300 3300>;
spi-max-frequency = <3906250>;
};
};
В RootFS в каталоге /dev создал mknod'ом файлы устройства spi и mmc
sudo mknod mmcblk0p1 b 179 1
sudo mknod mmcblk0 b 179 0
sudo mknod spidev32766.0 c 153 7
Часть конфиг файла ядра GNU/Linux
Цитата
..........
#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
CONFIG_SPI_BITBANG=y
# CONFIG_SPI_PXA2XX_PCI is not set
CONFIG_SPI_XILINX=y
# CONFIG_SPI_XILINX_PS_QSPI is not set
# CONFIG_SPI_XILINX_PS_SPI is not set
# CONFIG_SPI_DESIGNWARE is not set
#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set
# CONFIG_HSI is not set
#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
...........
#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_SDHCI is not set
CONFIG_MMC_SPI=y
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
CONFIG_XILINX_EDK=y
# CONFIG_UIO is not set
.................
#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
CONFIG_SPI_BITBANG=y
# CONFIG_SPI_PXA2XX_PCI is not set
CONFIG_SPI_XILINX=y
# CONFIG_SPI_XILINX_PS_QSPI is not set
# CONFIG_SPI_XILINX_PS_SPI is not set
# CONFIG_SPI_DESIGNWARE is not set
#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set
# CONFIG_HSI is not set
#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
...........
#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_SDHCI is not set
CONFIG_MMC_SPI=y
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
CONFIG_XILINX_EDK=y
# CONFIG_UIO is not set
.................
При отключенной отладке SPI и ММС ядро плюется следующим:
Цитата
[ 3.702550] xilinx_spi 83400000.spi: master is unqueued, this is deprecated
[ 3.713407] xilinx_spi 83400000.spi: at 0x83400000 mapped to 0xf0200000, irq=10
[ 3.741440] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 3.746187] mmc_spi spi32766.0: can't change chip-select polarity
[ 3.770654] mmc_spi spi32766.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
[ 3.804369] Freeing unused kernel memory: 895k freed
[ 3.834421] mmc0: error -110 whilst initialising SD card
[ 3.890604] mmc0: error -110 whilst initialising MMC card
Starting rcS...
++ Creating device points
++ Mounting filesystem
++ Loading system loggers
++ Starting telnet daemon
rcS Complete
/bin/sh: can't access tty; job control turned off
/ # [ 4.911704] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 4.916457] mmc_spi spi32766.0: can't change chip-select polarity
[ 4.990578] mmc0: error -110 whilst initialising SD card
[ 5.030569] mmc0: error -110 whilst initialising MMC card
[ 6.051540] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 6.056302] mmc_spi spi32766.0: can't change chip-select polarity
[ 6.130675] mmc0: error -110 whilst initialising SD card
[ 6.170628] mmc0: error -110 whilst initialising MMC card
[ 7.191447] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 7.196200] mmc_spi spi32766.0: can't change chip-select polarity
[ 7.270577] mmc0: error -110 whilst initialising SD card
[ 3.713407] xilinx_spi 83400000.spi: at 0x83400000 mapped to 0xf0200000, irq=10
[ 3.741440] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 3.746187] mmc_spi spi32766.0: can't change chip-select polarity
[ 3.770654] mmc_spi spi32766.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
[ 3.804369] Freeing unused kernel memory: 895k freed
[ 3.834421] mmc0: error -110 whilst initialising SD card
[ 3.890604] mmc0: error -110 whilst initialising MMC card
Starting rcS...
++ Creating device points
++ Mounting filesystem
++ Loading system loggers
++ Starting telnet daemon
rcS Complete
/bin/sh: can't access tty; job control turned off
/ # [ 4.911704] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 4.916457] mmc_spi spi32766.0: can't change chip-select polarity
[ 4.990578] mmc0: error -110 whilst initialising SD card
[ 5.030569] mmc0: error -110 whilst initialising MMC card
[ 6.051540] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 6.056302] mmc_spi spi32766.0: can't change chip-select polarity
[ 6.130675] mmc0: error -110 whilst initialising SD card
[ 6.170628] mmc0: error -110 whilst initialising MMC card
[ 7.191447] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 7.196200] mmc_spi spi32766.0: can't change chip-select polarity
[ 7.270577] mmc0: error -110 whilst initialising SD card
С включенной отладкой:
Цитата
[ 3.703501] xilinx_spi 83400000.spi: registered master spi32766 (dynamic)
[ 3.709220] xilinx_spi 83400000.spi: master is unqueued, this is deprecated
[ 3.719393] spi spi32766.0: setup mode 0, 8 bits/w, 3906250 Hz max --> 0
[ 3.726538] xilinx_spi 83400000.spi: registered child spi32766.0
[ 3.731733] xilinx_spi 83400000.spi: at 0x83400000 mapped to 0xf0200000, irq=10
[ 3.738686] KRUGER: spi init finish
[ 3.744912] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 3906250 Hz max --> 0
[ 3.752928] mmc0: clock 0Hz busmode 2 powermode 1 cs 1 Vdd 21 width 0 timing 0
[ 3.759100] mmc_spi spi32766.0: mmc_spi: power up (21)
[ 3.780588] mmc0: clock 30000000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 0 timing 0
[ 3.787356] mmc_spi spi32766.0: mmc_spi: power on (21)
[ 3.793483] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 3.798303] mmc_spi spi32766.0: can't change chip-select polarity
[ 3.804581] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.811645] mmc_spi spi32766.0: mmc_spi: clock to 30000000 Hz, 0
[ 3.830659] mmc_spi spi32766.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
[ 3.837008] mmc0: mmc_rescan_try_freq: trying to init card at 30000000 Hz
[ 3.843883] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 3.865901] Freeing unused kernel memory: 895k freed
[ 3.871569] mmc_spi spi32766.0: mmc_spi: CMD52, resp R2/R5
[ 3.881013] mmc_spi spi32766.0: ... CMD52 response SPI_R2/R5: resp ff04 00000000
[ 3.887585] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.894780] mmc0: req done (CMD52): -38: 0000ff04 00000000 00000000 00000000
[ 3.919701] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 3.931162] mmc_spi spi32766.0: mmc_spi: CMD52, resp R2/R5
[ 3.940795] mmc_spi spi32766.0: ... CMD52 response SPI_R2/R5: resp ff04 00000000
[ 3.947364] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.954553] mmc0: req done (CMD52): -38: 0000ff04 00000000 00000000 00000000
[ 3.990702] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 3.995240] mmc_spi spi32766.0: mmc_spi: CMD0, resp R1
Starting rcS...
[ 4.011375] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.017440] mmc0: req done (CMD0): 0: 00000001 00000000 00000000 00000000
[ 4.042263] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 4.046805] mmc_spi spi32766.0: mmc_spi: CMD8, resp R3/R4/R7
++ Creating device points
[ 4.070936] mmc_spi spi32766.0: ... CMD8 response SPI_R3/R4/R: resp 0005 ffffffff
[ 4.077601] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.084809] mmc0: req done (CMD8): -38: 00000005 ffffffff 00000000 00000000
[ 4.120794] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 4.125343] mmc_spi spi32766.0: mmc_spi: CMD5, resp R3/R4/R7
[ 4.145435] mmc_spi spi32766.0: ... CMD5 response SPI_R3/R4/R: resp 0005 ffffffff
[ 4.152264] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.159174] mmc0: req done (CMD5): -38: 00000005 ffffffff 00000000 00000000
++ Mounting filesystem
[ 4.200728] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 4.205361] mmc_spi spi32766.0: mmc_spi: CMD55, resp R1
[ 4.211465] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.217839] mmc0: req done (CMD55): 0: 00000001 00000000 00000000 00000000
[ 4.250771] mmc0: starting CMD41 arg 00000000 flags 000000e1
[ 4.255393] mmc_spi spi32766.0: mmc_spi: CMD41, resp R1
[ 4.270968] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.277038] mmc0: req done (CMD41): 0: 00000001 00000000 00000000 00000000
[ 4.301018] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 4.305561] mmc_spi spi32766.0: mmc_spi: CMD0, resp R1
[ 4.320857] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.326927] mmc0: req done (CMD0): 0: 00000001 00000000 00000000 00000000
[ 4.352027] mmc0: starting CMD58 arg 00000000 flags 00000280
[ 4.356660] mmc_spi spi32766.0: mmc_spi: CMD58, resp R3/R4/R7
[ 3.709220] xilinx_spi 83400000.spi: master is unqueued, this is deprecated
[ 3.719393] spi spi32766.0: setup mode 0, 8 bits/w, 3906250 Hz max --> 0
[ 3.726538] xilinx_spi 83400000.spi: registered child spi32766.0
[ 3.731733] xilinx_spi 83400000.spi: at 0x83400000 mapped to 0xf0200000, irq=10
[ 3.738686] KRUGER: spi init finish
[ 3.744912] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 3906250 Hz max --> 0
[ 3.752928] mmc0: clock 0Hz busmode 2 powermode 1 cs 1 Vdd 21 width 0 timing 0
[ 3.759100] mmc_spi spi32766.0: mmc_spi: power up (21)
[ 3.780588] mmc0: clock 30000000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 0 timing 0
[ 3.787356] mmc_spi spi32766.0: mmc_spi: power on (21)
[ 3.793483] mmc_spi spi32766.0: setup: unsupported mode bits 4
[ 3.798303] mmc_spi spi32766.0: can't change chip-select polarity
[ 3.804581] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.811645] mmc_spi spi32766.0: mmc_spi: clock to 30000000 Hz, 0
[ 3.830659] mmc_spi spi32766.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
[ 3.837008] mmc0: mmc_rescan_try_freq: trying to init card at 30000000 Hz
[ 3.843883] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 3.865901] Freeing unused kernel memory: 895k freed
[ 3.871569] mmc_spi spi32766.0: mmc_spi: CMD52, resp R2/R5
[ 3.881013] mmc_spi spi32766.0: ... CMD52 response SPI_R2/R5: resp ff04 00000000
[ 3.887585] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.894780] mmc0: req done (CMD52): -38: 0000ff04 00000000 00000000 00000000
[ 3.919701] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 3.931162] mmc_spi spi32766.0: mmc_spi: CMD52, resp R2/R5
[ 3.940795] mmc_spi spi32766.0: ... CMD52 response SPI_R2/R5: resp ff04 00000000
[ 3.947364] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 3.954553] mmc0: req done (CMD52): -38: 0000ff04 00000000 00000000 00000000
[ 3.990702] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 3.995240] mmc_spi spi32766.0: mmc_spi: CMD0, resp R1
Starting rcS...
[ 4.011375] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.017440] mmc0: req done (CMD0): 0: 00000001 00000000 00000000 00000000
[ 4.042263] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 4.046805] mmc_spi spi32766.0: mmc_spi: CMD8, resp R3/R4/R7
++ Creating device points
[ 4.070936] mmc_spi spi32766.0: ... CMD8 response SPI_R3/R4/R: resp 0005 ffffffff
[ 4.077601] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.084809] mmc0: req done (CMD8): -38: 00000005 ffffffff 00000000 00000000
[ 4.120794] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 4.125343] mmc_spi spi32766.0: mmc_spi: CMD5, resp R3/R4/R7
[ 4.145435] mmc_spi spi32766.0: ... CMD5 response SPI_R3/R4/R: resp 0005 ffffffff
[ 4.152264] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.159174] mmc0: req done (CMD5): -38: 00000005 ffffffff 00000000 00000000
++ Mounting filesystem
[ 4.200728] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 4.205361] mmc_spi spi32766.0: mmc_spi: CMD55, resp R1
[ 4.211465] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.217839] mmc0: req done (CMD55): 0: 00000001 00000000 00000000 00000000
[ 4.250771] mmc0: starting CMD41 arg 00000000 flags 000000e1
[ 4.255393] mmc_spi spi32766.0: mmc_spi: CMD41, resp R1
[ 4.270968] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.277038] mmc0: req done (CMD41): 0: 00000001 00000000 00000000 00000000
[ 4.301018] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 4.305561] mmc_spi spi32766.0: mmc_spi: CMD0, resp R1
[ 4.320857] mmc_spi spi32766.0: setup mode 0, 8 bits/w, 30000000 Hz max --> 0
[ 4.326927] mmc0: req done (CMD0): 0: 00000001 00000000 00000000 00000000
[ 4.352027] mmc0: starting CMD58 arg 00000000 flags 00000280
[ 4.356660] mmc_spi spi32766.0: mmc_spi: CMD58, resp R3/R4/R7
И так постоянно

Смотрел осциллографом - все как положено - битики бегают

Есть ли у кого нибудь предложения ? Заранее благодарен за любой совет!