cancel
Showing results for 
Search instead for 
Did you mean: 

Nor Flash

adaml
New Contributor

Hello everybody!

 

Recently I was doing some hacky/fancy tests of flash chip behavior between different manufacturers when it is used not *exactly* how it was intended 😉 I was changing configuration of external memory controller in my MCU to drive WE# line low or high during reading operation (used for example for chips with byte lane selection etc.) and I've encountered something strange which I couldn't find in the S29AL016J datasheet.

 

In other flash chip manufacturers (pin-to-pin comp. + same timings and control) when I try to perform read operation ("uint16_t test = *(uint16_t*)(FLASH_BASE);") everything works correctly, i.e. data is exposed on data lines if WE# line is driven high, and data lines are kept low if WE# line is driven low.

In S29AL016J it doesn't matter if MCU drives WE# line low or high during reading, chip drives data lines anyway!

It looks like some flash chip's internal state machine checks if address set on address lines is "special" one (0x555 etc.) and if not, it executes read operation and exposes data on data lines.

 

Could anybody confirm it?

 

Some snippet code looks like that:

//set EMC to drive WE# line low during reading

//EMC_cfg_we(FALSE);


//set EMC to drive WE# line high during reading

EMC_cfg_we(TRUE);


while(1)

{

   uint8_t test = ( *( Uint16 * )(0x80000000L)) & 0xFF;

   uart_putc(test);

   delay_ms(500);

}

 

I have few identical PCBs with same MCU, only flash chip is different.

 

I would really appreciate for any explanation!

 

BR

Adam

0 Likes
1 Solution
AlbertB_56
Employee

Hello Adam,

Yes, OE# and WE# cannot be active LOW simultaneously.  There is certainly data bus contention when both input control signals are active LOW.   Please verify and confirm the activity of both OE# and WE# control signals, from the microcontroller, and set the proper input condition for each input signal, as appropriate

Since the S29AL016J is configured in WORD mode, please refer to the app note attached, for the correct connections to the FLASH, as well the proper commands to send to the FLASH, in WORD mode.

 

 

Best regards,

Albert

Cypress Semiconductor Corp.

An Infineon Technologies Company 

 

View solution in original post

0 Likes
3 Replies
AlbertB_56
Employee

Hello Adam,

Thank you for contacting  Cypress Semiconductor.

Please allow us to research your issue .  We will communicate any new information

to you as soon as it becomes available.

 

Best regards,

Albert

Cypress Semiconductor Corp.

AN Infineon Technologies Company

adaml
New Contributor

Hi Albert,

 

ok, great! To help you to recreate such behavior I can add information about control signals:

 

BYTE# - high (word access)

WP# - not connected (internally pulled up)

CE# - low (activate chip)

OE# - low (perform read  operation)

WE# - low (tested state, not mentioned in bus operation, correctly should be high)

address lines - all zeroes

data lines - HiZ (from MCU perspective)

 

Best regards,

Adam

0 Likes
AlbertB_56
Employee

Hello Adam,

Yes, OE# and WE# cannot be active LOW simultaneously.  There is certainly data bus contention when both input control signals are active LOW.   Please verify and confirm the activity of both OE# and WE# control signals, from the microcontroller, and set the proper input condition for each input signal, as appropriate

Since the S29AL016J is configured in WORD mode, please refer to the app note attached, for the correct connections to the FLASH, as well the proper commands to send to the FLASH, in WORD mode.

 

 

Best regards,

Albert

Cypress Semiconductor Corp.

An Infineon Technologies Company 

 

View solution in original post

0 Likes