Nor Flash Forum Discussions
Hi,
I would like to confirm regarding AC Characteristics of the S29AL008J70TFI010.
As per datasheet, tACC max is 70ns. But from Logic Analyzer capture, I am getting 1.3us.
Can please help to clarify if I am measuring at the correct point?
DATASHEET AC CHARACTERISTIC:
LOGIC ANALYZER CAPTURE:
Show Less
Hello,
I am using the S70GL02GT in my embedded system, and I understand that this is a dual S29GL01GT package and that A26 serves as a die-select input.
I use the chip in x8 mode.
I found that the Autoselect (ID-CFI) and Read operations are exaclly the same as described in the S29GL01GT datasheet and the related LLD.
The writing operations are also the same for the first half of the memory space (first die).
I was surprised to find that I actually have to hold A26 high during the unlock procedure to write in sectors over 1024???
This is hinted at in the Continuity Check procedure (chapter 5.4.9.11 in the S29GL01GT datasheet) but it is not explained in the datasheet as far as I can tell.
The problem is that this technique does not apply to erasing.
Sending the chip erase command only erases the lower die (sectors 0 to 1023) and sending a sector erase command only works up to sector 1023.
Sending the unlock cycles and chip erase command with A26 held high does not work (The satus register does not show busy).
Please tell me it this behaviour is intended, and whet is the correct procedure to erase sectors 1024 to 2047 in the S70GL02GT.
Thanks in advance
Show LessDear All,
We have interfaced NOR flash (part number :S70GL02GS) to processor is AM3352 via GPMC interface.
In old kernel V3.20, physmap_flash_driver is also being registered using platform_driver_register() and hence physmap_flash_probe() is being called. This is done as below:
We have below MTD partiton table. Member "name" platform_device is mapped to the "drivers/mtd/maps/physmap.c" structure.
In board specific file they have below
static struct physmap_flash_data norflash_data = {
.width = 2,
.parts = nor_partitions,
.nr_parts = ARRAY_SIZE(nor_partitions),
};
static struct platform_device norflash = {
.name = "physmap-flash",
.id = 0,
.dev = {
.platform_data = &norflash_data,
},
.num_resources = 1,
.resource = &norflash_resource,
};
static struct mtd_partition nor_partitions[] = {
{
.name = "uboot",
.offset = 0,
.size = 4 * SZ_128K,
},
…
}
In "drivers/mtd/maps/physmap.c"
static struct platform_device physmap_flash = {
.name = "physmap-flash",
.id = 0,
.dev = {
.platform_data = &physmap_flash_data,
},
.num_resources = 1,
.resource = &physmap_flash_resource,
};
How to achieve the same functionality in New Kernel Version 4.14 using DTS functionality? Or In DTS file, how this mapping to be done for S70GL02GS?
I have tried below options:
&gpmc {
compatible = "ti,am3352-gpmc";
ti,hwmods = "gpmc";
status = "okay";
nor@0,0 {
reg = <0 0x00000000 0x10000000>;
linux,mtd-name = "physmap-flash.0";
linux,mtd-name = "physmap-flash";
}
}
Till now your support has been great. Thank you for that. Please let me know if you have any input on this.
Regards
Srinivasa
Show Lesshello all
I use S25FL512S with STM32,but I have a problem with REMS cmd:
when SI output 0x90+0x000000+0x0000, SO can only receve manufacture ID(0x01) correctly and can not receive device ID(0x19);
when SI output 0x90+0x000001+0x0000, SO can only receve device ID(0x19) correctly and can not receive manufacture ID(0x01);
I have used oscilloscope and found that : the wave of SI is correct, the firse byte of SO is correct and the second byte has no wave,as follows:
I want to know where is the reason.
thank you very much!
Show LessGood morning,
I am developing an embedded application on a soft MPU instantiated in a FPGA. One of the thing the fw should do is to read/write data from/to a flash, 16-pin spi memory. For my project I need to test several SPI flash brands, including Micron, Macronix and Cypress, on the same hardware. Luckily I managed to obtain some high-level drivers (i.e. drivers based on the vendor SPI driver that allow me to perform operations like erase sectors, program the flash and so on) written for the Micron, which I easily adapted to the macronix and the Cypress S70FL01GS (3.3V) by changing a few registers.
I would now like to use the S70FS01GS (1.8V. Of course the voltage has been switched to 1.8) and I am encountering some problems since, in spite of the similar names, the access to some information is different. For example the STATUS REGISTER (0x05), which I used on the S70FL01GS to check if a write/erase operation is over, has become obsolete and was replaced by an access to register x00800000 using the "read any register" register (0x65). As a consequence, where in my code I have to wait for an erase operation to conclude, I replaced this function (that works correctly with Micron, Macronix and Cypress S70FL01GS):
static void wait_ready( void )
{
uint8_t ready_bit;
uint8_t command = READ_STATUS; // =0x05
SPI_set_slave_select(SPI_INSTANCE, SPI_SLAVE); //SPI_INSTANCE is the SPI driver handle, SPI_SLAVE the slave index (which determines the chip select)
do {
SPI_transfer_block(SPI_INSTANCE, &command, 1, &ready_bit,1);
ready_bit = ready_bit & READY_BIT_MASK; // READY_BIT_MASK=0x1
} while( ready_bit == 1 );
SPI_set_slave_select(SPI_INSTANCE, SPI_SLAVE);
}
with:
static void wait_ready( void)
{
uint8_t ready_bit;
uint8_t command[5];
command[0]=READ_ANY_REG; // =0x65
command[1]=0;
command[2]=0x80;
command[3]=0;
command[4]=0;
SPI_set_slave_select(SPI_INSTANCE, SPI_SLAVE);
do {
SPI_transfer_block(SPI_INSTANCE, command,5,&ready_bit,1);
ready_bit = ready_bit & READY_BIT_MASK;
} while( ready_bit == 1 );
SPI_set_slave_select(SPI_INSTANCE, SPI_SLAVE);
}
which in principle should read the LSB of register x00800000 in a loop and exit when the erase operation is over. However the function exits immediately, even when operations that take long (e.g. erasing a 256k sector, that on the S70FL01GS takes approximately 1sec) are performed. The 4-byte addressing mode is set.
What am I doing wrong?
Thanks,
Stefano
Show LessMay I ask which device model bond this connector to the I/O power supply?I need to use this type,but I cannot find the information in the datasheet.Need Help!!
Show Lesshi,
We found in the s25fl512.v and s25fl256s.v define SPEEDSIM have the same define value with no-define SPEEDSIM.
And it takes so long time to run the simulation if the SPEEDSIM didn't work.
The code is below.
`ifdef SPEEDSIM
// Page Program Operation
specparam tdevice_PP_256 = 55e7;//tPP
// Page Program Operation
specparam tdevice_PP_512 = 75e7;//tPP
// Typical Byte Programming Time
specparam tdevice_BP = 4e8;//tBP
// Sector Erase Operation
specparam tdevice_SE = 1875e7;//tSE
// Bulk Erase Operation
specparam tdevice_BE = 460e9;//tBE
// WRR Cycle Time
specparam tdevice_WRR = 2e9;//tW
// Erase Suspend/Erase Resume Time
specparam tdevice_ERSSUSP = 40e6;//tESL
// Program Suspend/Program Resume Time
specparam tdevice_PRGSUSP = 40e6;//
// VCC (min) to CS# Low
specparam tdevice_PU = 3e8;//tPU
// PPB Erase Time
specparam tdevice_PPBERASE = 15e9;//
// Password Unlock Time
specparam tdevice_PASSULCK = 1e6;//
// Password Unlock to Password Unlock Time
specparam tdevice_PASSACC = 100e6;
`else
// Page Program Operation
specparam tdevice_PP_256 = 55e7;//tPP
// Page Program Operation
specparam tdevice_PP_512 = 75e7;//tPP
// Typical Byte Programming Time
specparam tdevice_BP = 4e8;//tBP
// Sector Erase Operation
specparam tdevice_SE = 1875e9;//tSE
// Bulk Erase Operation
specparam tdevice_BE = 460e12;//tBE
// WRR Cycle Time
specparam tdevice_WRR = 2e11;//tW
// Erase Suspend/Erase Resume Time
specparam tdevice_ERSSUSP = 40e6;//tESL
// Program Suspend/Program Resume Time
specparam tdevice_PRGSUSP = 40e6;//
// VCC (min) to CS# Low
specparam tdevice_PU = 3e8;//tPU
// PPB Erase Time
specparam tdevice_PPBERASE = 15e9;//
// Password Unlock Time
specparam tdevice_PASSULCK = 1e6;//
// Password Unlock to Password Unlock Time
specparam tdevice_PASSACC = 100e6;
`endif // SPEEDSIM
So we need the correct vaule to speed up our simulation, tks.
Show LessHi,
I need to interface with the S70GL02GS flash. I needed the sequence of commands for ersa and program which I am not ale to find in the datasheet. Could you pleasepoint me to a document or provide an example of interfacing with the flash for programming/erasing. I would appreciate both multiword and word by word programming examples
Thanks
Sachin
Show Less