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