cancel
Showing results for 
Search instead for 
Did you mean: 

Nor Flash

NoKo_3612966
New Contributor

Issue:
We want to use external flash memory with a bootloader.

We tested firmware which is modified from https://github.com/cypresssemiconductorco/mtb-example-psoc6-mcuboot-basic .

We tested our firmware with CY8CKIT-062S2-43012, which has S25FL512SAGMFI010 and it works.

Because of procurement, we want to change the flash memory to S25FL512AGMFA010.

We changed the flash memory chip on CY8CKIT-062S2-43012 from S25FL512SAGMFI010 to S25FL512AGMFA010, which is bought from Digi-Key, then firmware can not read/write the flash memory.

 

Detail:
It looks like the chip does not respond to 4QIR(0xEC) command.
Attached are screenshots of the oscilloscope during the read cycle.
In case of S25FL512SAGMFI010, IO0(yellow), IO1(cyan), IO2(purple), IO3(green) ,SS(digital 0), and CLK(digital 1) work well.

However, In case of S25FL512AGMFA010, after command and address are specified, IO0..4 bus are looked to be released.

During command(0xEC) and address specification(0x00f0 using 4bits), waveform are driven from PSoC appropriately.

Howerver, the duration flash memory is expected to response data, no signal response, and decreasing exponentially before CS is deserted.

PSoC firmware is completely the same for both cases. Only chip change.

Question:
What is the difference between S25FL512SAGMFI010 and S25FL512AGMFA010?
Is any factory initialize required to use S25FL512AGMFA010?
How to solve our issue?

 

0 Likes
1 Solution
AS_36
Moderator
Moderator

Hi @NoKo_3612966 

First of all, can you please confirm the part number of the new device? Is it S25FL512AGMFA010 or S25FL512SAGMFA010? S25FL512AGMFA010 does not seem like a correct part number.

Secondly, the 4QIOR (ECh) command is a quad command and requires that the QUAD bit be set in the Configuration Register. Can you confirm that Quad mode has been enabled for the new device?

AS_36_0-1624110304567.png

If Quad mode has not been enabled, please do so by setting the QUAD bit (CR1[1]) bit of Configuration Register 1.

Lastly, assuming that the new device MPN is S25FL512SAGMFA010 and old device MPN is S25FL512SAGMFI010, there is no difference in the functionality of the two devices. Only difference is in the temperature range of the devices. Same firmware should work on both devices in a similar way.

Regards.

View solution in original post

0 Likes
3 Replies
AS_36
Moderator
Moderator

Hi @NoKo_3612966 

First of all, can you please confirm the part number of the new device? Is it S25FL512AGMFA010 or S25FL512SAGMFA010? S25FL512AGMFA010 does not seem like a correct part number.

Secondly, the 4QIOR (ECh) command is a quad command and requires that the QUAD bit be set in the Configuration Register. Can you confirm that Quad mode has been enabled for the new device?

AS_36_0-1624110304567.png

If Quad mode has not been enabled, please do so by setting the QUAD bit (CR1[1]) bit of Configuration Register 1.

Lastly, assuming that the new device MPN is S25FL512SAGMFA010 and old device MPN is S25FL512SAGMFI010, there is no difference in the functionality of the two devices. Only difference is in the temperature range of the devices. Same firmware should work on both devices in a similar way.

Regards.

View solution in original post

0 Likes
NoKo_3612966
New Contributor

Thank you for your reply.

Sorry confusion.

We use S25FL512SAGMFI010 on CY8CKIT-S062S2-43012 board and it works fine.
We replaced it to S52FL512SAGMFA010 and it does not work.

I check the QUAD bit of CR1.

Yes, you are correct.

The QUAD bit is non-volatile.
Someone already had turned on the bit of S25FL512SAGMFI010 and my code does not turn on.
That is the root cause that my code can not access using quad mode for S52FL512SAGMFA010, which is a new chip.

I add the turn-on process in my code and it works!!!

Thanks a lot.

One more question.

Which API do you recommend?

* Cy_SMIF_MemEnableQuadMode()
* Cy_SMIF_MemQuadEnable()

0 Likes
AS_36
Moderator
Moderator

Hi @NoKo_3612966 ,

Apologies for the delay in responding.

The Cy_SMIF_MemEnableQuadMode() API calls the Cy_SMIF_MemQuadEnable() API along with the Cy_SMIF_MemCmdWriteEnable() and Cy_SMIF_MemIsReady() API. If you use the Cy_SMIF_MemQuadEnable() API, you will have to call the APIs for write enable command and status register polling yourself.

You can use either of the APIs depending on your application.

Regards.