- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Solved! Go to Solution.
- Labels:
-
Memory Nor Flash
- Tags:
- s29al016j
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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