Beispiel #1
0
status_t flexspi_nor_hyperflash_cfi(FLEXSPI_Type *base)
{
    /*
     * Read ID-CFI Parameters
     */
    // CFI Entry
    status_t status;
    uint32_t buffer[2];
    uint32_t data[1] = {0x9800};
    status = flexspi_nor_hyperbus_write(base, 0x555, data, 2);
    if (status != kStatus_Success)
    {
        return status;
    }

    // PRINTF("Entering the ASO mode\r\n");
    // ID-CFI Read
    // Read Query Unique ASCII String
    status = flexspi_nor_hyperbus_read(base, 0x10, &buffer[0], sizeof(buffer));
    if (status != kStatus_Success)
    {
        return status;
    }
    buffer[1] &= 0xFFFF;
    // Check that the data read out is  unicode "QRY" in big-endian order
    if ((buffer[0] != 0x52005100) || (buffer[1] != 0x5900))
    {
        status = kStatus_Fail;
        // PRINTF("Can not found the HyperFlash!\r\n");
        return status;
    }
    // ASO Exit
    data[0] = 0xF000;
    status = flexspi_nor_hyperbus_write(base, 0x0, data, 2);
    if (status != kStatus_Success)
    {
        // PRINTF("Can not exit the ASO\r\n");
        return status;
    }

    // PRINTF("Found the HyperFlash by CFI\r\n");

    return status;
}
SECTION("itcm") status_t flexspi_nor_hyperflash_cfi(FLEXSPI_Type *base)
{
    /*
     * Read ID-CFI Parameters
     */
    // CFI Entry
    status_t status;
    uint32_t buffer[2];
    uint32_t data = 0x9800;
    status = flexspi_nor_hyperbus_write(base, 0x555, &data, 2);
    if (status != kStatus_Success)
    {
        return status;
    }
    // ID-CFI Read
    // Read Query Unique ASCII String
    status = flexspi_nor_hyperbus_read(base, 0x10, &buffer[0], sizeof(buffer));
    if (status != kStatus_Success)
    {
        return status;
    }
    buffer[1] &= 0xFFFF;
    // Check that the data read out is  unicode "QRY" in big-endian order
    if ((buffer[0] != 0x52005100) || (buffer[1] != 0x5900))
    {
        status = kStatus_Fail;
        return status;
    }
    // ASO Exit
    data = 0xF000;
    status = flexspi_nor_hyperbus_write(base, 0x0, &data, 2);
    if (status != kStatus_Success)
    {
        return status;
    }
    return status;
}