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

С платой всё норм, осталось только eMMC стартануть. Накой тут выдача FSBL, если всё залито по JTAG. Тестовый проект содержит три строки - попытку инициализации eMMC

	#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xsdps.h"
	XSdPs emmc;
XSdPs *p_emmc = &emmc;
	int main()
{
    XSdPs_Config * emmc_config;
    int status;
	    emmc_config = XSdPs_LookupConfig(XPAR_XSDPS_0_DEVICE_ID);
    status = XSdPs_CfgInitialize(p_emmc, emmc_config, emmc_config->BaseAddress);
	    status = XSdPs_CardInitialize(p_emmc);
//    status = XSdPs_SdCardInitialize(p_emmc);
	    return 0;
}
	

и дохнет внутри XSdPs_CardInitialize

	    /* CMD0 no response expected */    Status = XSdPs_CmdTransfer(InstancePtr, CMD0, 0U, 0U);
    if (Status != XST_SUCCESS) {
        Status = XST_FAILURE;
        goto RETURN_PATH;
    }
	    RespOCR = 0U;
    /* Send CMD1 while card is still busy with power up */
    while ((RespOCR & XSDPS_RESPOCR_READY) == 0U) {
	        /* Host High Capacity support & High volage window */
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1,  XSDPS_ACMD41_HCS | XSDPS_CMD1_DUAL_VOL/*XSDPS_CMD1_HIGH_VOL*/, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0x80000080, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0xC0000080, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0x40FF8080, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0xC0FF8080, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0x00FF8080, 0U);
	        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0xC0FF8080, 0U);
//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0, 0U);
	//        Status = XSdPs_CmdTransfer(InstancePtr, CMD1, 0xC0000080, 0U);
	        if (Status != XST_SUCCESS) {
            Status = XST_FAILURE;
            goto RETURN_PATH;
        }
	        /* Response with card capacity */
        RespOCR = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
                XSDPS_RESP0_OFFSET);
//        XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
//                        XSDPS_RESP3_OFFSET);
    }
	

Сам FSBL использует функции этой же либы, т.е. порядок инициализации памяти тот же.

Тут больше вопрос в совместимости спецификаций eMMC v4.51 и v5.0 и что за ответ такой 0x00ee0001. Пока думаем поменять eMMC на другую, в соответствии с AR# 65463.

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


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

51 минуту назад, doom13 сказал:

С платой всё норм, осталось только eMMC стартануть. Накой тут выдача FSBL, если всё залито по JTAG. Тестовый проект содержит три строки - попытку инициализации eMMC

и дохнет внутри XSdPs_CardInitialize

Сам FSBL использует функции этой же либы, т.е. порядок инициализации памяти тот же.

Тут больше вопрос в совместимости спецификаций eMMC v4.51 и v5.0 и что за ответ такой 0x00ee0001. Пока думаем поменять eMMC на другую, в соответствии с AR# 65463.

не великий знаток eMMC, а как у вас чип запитан? оба питания 1.8 или как? в доке Vddf = 3.3, может тут корень проблем

как я понимаю, до CID дело не доходит, т.к. карта не выходит на готовность, может начальные действия ошибочны..

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


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

1.8 питание шины, Vddf как и должно быть 3.3 В.

До CMD2 Card ID не доходит. Так вроде из начальных действий только CMD0, CMD1, ну ещё потерпело немного, пока клоки устаканились, вот и все действия

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


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

5 hours ago, doom13 said:

порядок инициализации памяти тот же.

Ой ли? А покажите мне кусок кода, который переключает SDHCI в режим MMC?

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


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

s32 XSdPs_CardInitialize(XSdPs *InstancePtr)
{
	...
	if ((InstancePtr->HC_Version == XSDPS_HC_SPEC_V3) &&
			((InstancePtr->Host_Caps & XSDPS_CAPS_SLOT_TYPE_MASK)
			== XSDPS_CAPS_EMB_SLOT)) {
		InstancePtr->CardType = XSDPS_CHIP_EMMC;
	}
	...
	if (InstancePtr->CardType == XSDPS_CARD_SD) {
		...
	} else if ((InstancePtr->CardType == XSDPS_CARD_MMC)
			|| (InstancePtr->CardType == XSDPS_CHIP_EMMC)) {
		Status = XSdPs_MmcCardInitialize(InstancePtr);
		if (Status != XST_SUCCESS) {
			Status = XST_FAILURE;
			goto RETURN_PATH;
		}
		/* Change clock to default clock 26MHz */
		InstancePtr->BusSpeed = SD_CLK_26_MHZ;
		Status = XSdPs_Change_ClkFreq(InstancePtr, InstancePtr->BusSpeed);
		if (Status != XST_SUCCESS) {
			Status = XST_FAILURE;
			goto RETURN_PATH;
		}
	} 
	else {
		Status = XST_FAILURE;
		goto RETURN_PATH;
	}

	...
}

 

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


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

Пока не закончилось, заказали микросхему из списка Xilinx, попробуем поменять. На такую же менять пока не рискнули, чтоб плату не мучить, если и она не стартанёт.

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


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

Приветствую. Может кто подскажет, как заставить SD контроллер работать с eMMC памятью в режиме шины 8 бит?

Пока используется режим загрузки QSPI, FSBL стартует с QSPI, запускает u-boot, а уже u-boot забирает image.ub с памяти eMMC. В консоль плюёт такие сообщения:

Quote

U-Boot 2018.01 (Feb 26 2019 - 19:03:35 +0300) Xilinx ZynqMP ZCU102 rev1.0
 
I2C:   ready
DRAM:  2 GiB
EL Level:    EL2
Chip ID:    zu9eg
MMC:   sdhci@ff160000: 0 (eMMC)
SF: Detected n25q1024a with page size 512 Bytes, erase size 128 KiB, total 256 MiB
*** Warning - bad CRC, using default environment
 
In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Board: Xilinx ZynqMP
Bootmode: QSPI_MODE
Net:   ZYNQ GEM: ff0e0000, phyaddr ffffffff, interface rgmii-id
eth0: ethernet@ff0e0000
U-BOOT for zynqmp
 
Hit any key to stop autoboot:  1 0  
Device: sdhci@ff160000
Manufacturer ID: 13
OEM: 14e
Name: Q2J55  
Tran Speed: 200000000
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 7.1 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.1 GiB WRREL
Boot Capacity: 16 MiB ENH
RPMB Capacity: 4 MiB ENH
reading image.ub
6800848 bytes read in 485 ms (13.4 MiB/s)

Почему не произошло переключение шины в х8?

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


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

Да вроде всё перегенерил. Не могу понять, должна ли быть какая настройка для eMMC x8? Как мне казалось, должно само выбрать поддерживаемый памятью режим. На форуме Xilinx находил примеры лога для шины х8, но там система изначально стартовала с eMMC, у меня же QSPI->eMMC. Может FSBL должен был перенастроить шину? Или всё же u-boot?

Нашёл какого-то патча, думал поможет, но не получается с ним отбилдить проект.

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


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

Применить его пытался по инструкции Patching the Linux Kernel of a PetaLinux Project

 

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


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

Да выкиньте вы этот Petalinux... Возьмите свежий u-boot-xlnx, напишите сами конфиг и DT для  убута, в котором не забудьте поставить bus-width, и на пробу грузите ручками в JTAG mode. Из Petalinux возьмите только cross toolchains - они там вполне вменяемые

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


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

Это пока сложнее. Подробнее порядок действий не расскажете?

Не может ли быть проблема в FSBL, в моём режиме запуска QSPI он-то не трогает SD-контроллер?

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


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

Вопрос, скорее, не в FSBL, а в PMUFW - он может не открыть контроллер в "нужной  позе". U-Boot, вообще, видит PMUFW? Фраза "PMUFW V1.1" между ATF и U-Boot появляется? .bif можете показать?

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


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

Quote

NOTICE:  ATF running on XCZU9EG/silicon v3/RTL5.1 at 0xfffea000
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x10000
NOTICE:  BL31: v1.4(release):xilinx-v2018.1-4-g93a69a5a
NOTICE:  BL31: Built : 17:48:42, Feb 26 2019
NOTICE:  ATF running on XCZU9EG/silicon v3/RTL5.1 at 0xfffea000
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v1.4(release):xilinx-v2018.1-4-g93a69a5a
NOTICE:  BL31: Built : 17:48:42, Feb 26 2019
PMUFW:    v1.0
 
 
U-Boot 2018.01 (Feb 27 2019 - 16:18:25 +0300) Xilinx ZynqMP ZCU102 rev1.0
 
I2C:   ready
DRAM:  2 GiB
EL Level:    EL2
Chip ID:    zu9eg
MMC:   sdhci@ff160000: 0 (eMMC)
SF: Detected n25q1024a with page size 512 Bytes, erase size 128 KiB, total 256 MiB
*** Warning - bad CRC, using default environment
 
In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Board: Xilinx ZynqMP
Bootmode: QSPI_MODE
Net:   ZYNQ GEM: ff0e0000, phyaddr ffffffff, interface rgmii-id
eth0: ethernet@ff0e0000
U-BOOT for zynqmp
 
Hit any key to stop autoboot:  1 0  
Device: sdhci@ff160000
Manufacturer ID: 13
OEM: 14e
Name: Q2J55  
Tran Speed: 200000000
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 7.1 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.1 GiB WRREL
Boot Capacity: 16 MiB ENH
RPMB Capacity: 4 MiB ENH
reading image.ub
6800848 bytes read in 489 ms (13.3 MiB/s)

 

*.bif показать не могу, я BOOT.BIN из PetaLinux формирую.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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