-
Notifications
You must be signed in to change notification settings - Fork 3k
targets:MIMXRT1050: Add QSPI flash support #12711
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@liugang-gavin, thank you for your changes. |
@liugang-gavin I think as a target update only this comes under patch not feature type? Could you please update. |
@@ -271,11 +272,245 @@ status_t flexspi_nor_flash_page_program_ram(uint32_t address, const uint32_t *sr | |||
return status; | |||
} | |||
|
|||
#else | |||
AT_QUICKACCESS_SECTION_CODE(status_t flexspi_nor_enable_quad_mode_ram(void)); | |||
status_t flexspi_nor_enable_quad_mode_ram(void) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this an internal only api or are you adding something exposed to the user ?
flashXfer.dataSize = 1; | ||
|
||
status = FLEXSPI_TransferBlocking(FLEXSPI, &flashXfer); | ||
if (status != kStatus_Success) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be :
if () {
}
/* Write enable */ | ||
status = flexspi_nor_write_enable_ram(0); | ||
|
||
if (status != kStatus_Success) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be
if () {
}
return status; | ||
} | ||
|
||
void flexspi_update_lut_ram(void) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again , internal only api or externally exposed ?
flashXfer.data = &readValue; | ||
flashXfer.dataSize = 1; | ||
|
||
do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This whole block is incorrectly formatted. Please check coding guidelines and / or run through astyle
|
||
status = FLEXSPI_TransferBlocking(FLEXSPI, &flashXfer); | ||
|
||
if (status != kStatus_Success) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incorrect formatting
flashXfer.seqIndex = NOR_CMD_LUT_SEQ_IDX_ERASESECTOR; | ||
status = FLEXSPI_TransferBlocking(FLEXSPI, &flashXfer); | ||
|
||
if (status != kStatus_Success) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incorrect formatting
flashXfer.deviceAddress = address + offset; | ||
flashXfer.port = kFLEXSPI_PortA1; | ||
flashXfer.cmdType = kFLEXSPI_Write; | ||
flashXfer.SeqNumber = 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indentation seems to have gone wrong here
#else | ||
const flexspi_nor_config_t qspiflash_config = { | ||
.memConfig = | ||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.memConfig = {
.serialClkFreq = kFlexSpiSerialClk_133MHz, | ||
.lutCustomSeqEnable = 0u, | ||
.sflashA1Size = 0x00800000u, /* 8MB/64Mbit */ | ||
.lookupTable = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.lookupTable = {
thanks for your review, I'm working for the second version based on your comments. |
NXP MIMXRT1050 EVK can support Hyper Flash or QSPI Flash with small hardware reworks. Modify the XIP file to support boot from the two kinds of Flash device. The Hyper Flash should be the default device and defined in tartgets.json with the macro "HYPERFLASH_BOOT". To select the QSPI Flash, just remove the macro with the below line in any overriding json file. "target.macros_remove" : ["HYPERFLASH_BOOT"] Signed-off-by: Gavin Liu <[email protected]>
The flash access may fail when implementing flash initialization. So there is risk for interrupt handler which linked in flash space. Add the critical section to avoid the risk. Signed-off-by: Gavin Liu <[email protected]>
The memset function from c library will be linked in flash space, it's risk for FLASHIAP. So I wrote flexspi_memset to replace the memset for IMX FLASHIAP, and put the function into targets/.../TARGET_IMX/flash_api.c file. All IMX Soc platforms can declare it as extern and use in their Soc flexspi driver files. Signed-off-by: Gavin Liu <[email protected]>
Update the flash driver to support both Hyper Flash and QSPI Flash. In addition, the static function cannot be linked to SRAM even defined by AT_QUICKACCESS_SECTION_CODE macro. So remove all "static" modifier for the FLASHIAP functions. Signed-off-by: Gavin Liu <[email protected]>
For the application(firmware) booted by bootloader(OTA), the image doesn't need the "flash_config" and "ivt" header. So update the link file to support both kinds of application (firmware) booted by bootROM and bootloader. In default, the compilation will get the image with "flash_config" and "ivt" header, for example the bootloader compiling. When compiling the OTA application image, please add the line as below in the mbed_app.json file. "target.macros_add" : ["MBED_APP_COMPILE"] This will remove the "flash_config" and "ivt" header in the final image. Signed-off-by: Gavin Liu <[email protected]>
hi, adbridge and reviewer, I updated the PR with the second version patches, it includes new patches to fix some potential issues. And also I checked the code with astyle.
Thanks! |
HI @liugang-gavin we don't have anything to do with the Pelion example I'm afraid. |
CI restarted |
Test run: SUCCESSSummary: 6 of 6 test jobs passed |
Summary of changes
Impact of changes
Migration actions required
Documentation
None
Pull request type
Test results
Reviewers
[email protected]