Jump to content
    

С платой всё норм, осталось только 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.

Share this post


Link to post
Share on other sites

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 дело не доходит, т.к. карта не выходит на готовность, может начальные действия ошибочны..

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

5 hours ago, doom13 said:

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

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

Share this post


Link to post
Share on other sites

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;
	}

	...
}

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Приветствую. Может кто подскажет, как заставить 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?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 формирую.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...