This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM62P:AM62P:IS25WX512M 闪存定制

Guru**** 2826755 points

Other Parts Discussed in Thread: SYSCONFIG, AM62P, UNIFLASH

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1621088/am62p-am62p-is25wx512m-flash-customize

部件号: AM62P
主题中讨论的其他器件: SYSCONFIGUNIFLASH

您好、
我正在使用 AM62P 开发定制的闪存 IS25WX512M。 我已经尝试了 SysConfig 配置以及 Vaibhav Kumar 提供的修改后的“flash_nor_ospi.c",“,但、但我发现它不起作用。 目前、我已经验证了在 1S 模式下访问闪存的可行性。 我将 uart_uniflash_sbl2 设置为闪存 1S 模式、将 ospi_sbl1 设置为闪存 8D 模式、以便能够在 WKUP 中按顺序调试。 我已成功运行上述过程。
当我在函数 Flash_norOspiOpen 中进行调试时、我发现可以正确读取闪存 ID、但无法读取表明所选闪存协议的易失性寄存器。 下面附上了嗅探代码。
        /* Set device size and addressing bytes */
        OSPI_setDeviceSize(obj->ospiHandle, attrs->pageSize, attrs->blockSize);
        /* Set command opcode extension type */
        OSPI_setCmdExtType(obj->ospiHandle, config->devConfig->cmdExtType);
        /* Set initial number of address bytes */
        obj->numAddrBytes = 3;
        /* Set current protocol as 1s1s1s */
        obj->currentProtocol = FLASH_CFG_PROTO_1S_1S_1S;
        /* Now configure the flash for the selected protocol */
        status += Flash_norOspiSetProtocol(config, obj->ospiHandle, params);
        obj->currentProtocol = config->devConfig->protocolCfg.protocol;

        /* recheck the 8D mode reg */
        // read reg in 8D manner 
        uint8_t reg_8dflag_imme[3] = { 0 };
        status = Flash_norOspiCmdRead(config, 0x85, 0x00000000, 4, 7, reg_8dflag_imme, 4);
        /* read ID */
        uint8_t reg_id_imme[5] = { 0 };
        status = Flash_norOspiCmdRead(config, 0x9F, 0x00, 4, 7, reg_id_imme, 4); // dummy=7, result is aligned
您可能会注意到、我为 Flash_norOspiCmdRead 选择的参数为 cmdAddr=0x00 和 dummyBits=7、因为只有该设置才能确保读取闪存 ID 而不发生任何位移位。 我已向闪存制造商的 FAE 确认、8D 模式寄存器的地址为 0x00000000。 有任何关于如何解决此问题的想法?
此外、闪存制造商的 FAE 还提到、SoC 需要在 8D 模式下发送双命令帧以刷写 IS25WX512M。 换句话说、如果命令为 0x8E、则 SoC 发送的命令器件应为 0x8E8E。 我想仔细检查 AM62P 是否支持此功能。 如果支持此功能、如何启用它?
 
此致、
Bomiao
 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Bomiao

    感谢您的查询。

    由于当地假日的原因、预计响应会延迟。

    此致、

    Sreenivasa.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    想 deblecheck 这个线程的状态。

    此致、

    Bomiao  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除此之外、闪存制造商的 FAE 还提到、SoC 需要在 8D 模式下将双命令帧发送到闪存 IS25WX512M。 换句话说、如果命令为 0x8E、则 SoC 发送的命令器件应为 0x8E8E。 我想仔细检查 AM62P 是否支持此功能。 如果支持此功能、如何启用它?

    这已在“SysConfig">"Flash"中“中得到“得到处理“处理。 有一个部分允许用户配置颠倒、无和重复、因此如果没有、您必须已选择重复。

    此外、如果您避免将读取逻辑放在 flash_norOspiOpen 函数内、您的应用是否正常运行?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这在 sysconfig > flash 中已经做了专门处理。 有一个部分允许用户配置颠倒、无和重复、因此如果不这样做、您必须已选择重复。

    最好看到有一个配置选项来确保双帧发送。

    如果您避免将读取逻辑放在 flash_norOspiOpen 函数内、您的应用是否正常运行?

    否、应用程序无法正常工作。 如果我使用原始的  flash_norOspiOpen.c、则无法完成闪存驱动程序的初始化。 这就是为什么我 在  flash_norOspiOpen () 中按顺序进行调试的原因。  

    此致、

    Bomiao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Vaibhav、

    非常感谢大家跳转来支持该主题。

    谢谢

    此致、

    Anastas Yordanov

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fan:

    您能给我分享一下 MCU PLUS SDK 版本吗?

    此致、

    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vaibhav:

    MCU+SDK 版本为 11.01.01.08。

    此致、

    Bomiao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    我要将这些值设置为使闪存正常工作。

    SysConfig 值的屏幕截图:

    在此处更改  闪存名称  非常重要。

    更改  将闪存大小(以字节为单位)更改为 67108864

    更改  JEDEC 器件 ID 更改为 5B1A

    在 flash_nor_ospi.c 中的 API Flash_norOspiReadId 下、进行以下更改:

    static int32_t Flash_norOspiReadId(Flash_Config *config)
    {
        int32_t status = SystemP_SUCCESS;
        Flash_NorOspiObject *obj = (Flash_NorOspiObject *)(config->object);
        Flash_DevConfig *devCfg = config->devConfig;
        FlashCfg_ReadIDConfig *idCfg = &(devCfg->idCfg);
    
        uint8_t  idCode[FLASH_OSPI_JEDEC_ID_SIZE_MAX];
        uint32_t cmdAddr = OSPI_CMD_INVALID_ADDR;
        uint32_t dummyBits = 0;
        uint32_t idNumBytes = 3;
        uint32_t numAddrBytes = 0;
    
        if(obj->currentProtocol == FLASH_CFG_PROTO_8D_8D_8D)
        {
            if (config->attrs->manufacturerId == 0x34)
            {
                dummyBits = 4;
                cmdAddr = 0;
                numAddrBytes = obj->numAddrBytes;
                idNumBytes = 4; /* Can't read odd bytes in octal DDR */
            }
            else
            {
                dummyBits = 8;
                cmdAddr = OSPI_CMD_INVALID_ADDR;
                numAddrBytes = obj->numAddrBytes;
                idNumBytes = 4; /* Can't read odd bytes in octal DDR */
            }
        }
        else
        {
            /* default config */
        }
    
        status = Flash_norOspiCmdRead(config, idCfg->cmd, cmdAddr, numAddrBytes, dummyBits, idCode, idNumBytes);
    
        /* Verify ID with filled data */
        if (status == SystemP_SUCCESS)
        {
            uint32_t manfID, devID;
    
            manfID = (uint32_t)idCode[0];
            devID = ((uint32_t)idCode[1] << 8) | ((uint32_t)idCode[2]);
            if (!((manfID == config->attrs->manufacturerId) && (devID == config->attrs->deviceId)))
            {
                /* Try the other 3 bytes */
                manfID = (uint32_t)idCode[3];
                devID = ((uint32_t)idCode[4] << 8) | ((uint32_t)idCode[5]);
                if (!((manfID == config->attrs->manufacturerId) && (devID == config->attrs->deviceId)))
                {
                    status = SystemP_FAILURE;
                }
            }
            else
            {
                /* Success, nothing to do */;
            }
        }
    
        return status;
    }

    完成后、请确保正确重新构建库、然后重新构建应用。  

    请告诉我它是否有效。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、删除您对任何 API 所做的任何自定义修改、但确保包含我在上述 API Flash_norOspiReadId 响应中建议的更改。