Перейти к содержанию
    

Проблемы с SD/MMC over SPI

Доброго времени суток!

Решил подключить к 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

Часть 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>;
            };

        };

В 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 и ММС ядро плюется следующим:

[ 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.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.719393] spi spi32766.0: setup mode 0, 8 bits/w, 3906250 Hz max --> 0

...

[ 3.780588] mmc0: clock 30000000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 0 timing 0

Можно попробовать частоту понизить и попробовать 1-битный режим вместо 4-х битного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только добрался до платы.

Можно попробовать частоту понизить

Частоту изначально была достаточно низкая, это я в ходе экспериментов пробовал ее повысить для того что бы узнать как изменится поведение системы - не изменилось :)

попробовать 1-битный режим вместо 4-х битного.

Спасибо за наводку - сейчас буду пробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...