CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Replacing SST25VF080B by SST26VF064B
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

Replacing SST25VF080B by SST26VF064B
PostPosted: Fri Sep 11, 2020 11:23 am     Reply with quote

Hello, in a project I'm using a SST25VF080B successfully. I'm using the sst25vf.c driver supplied by the compiler.
Now I need more memory space and I replaced the SST25VF080B by an SST26VF064B using the same driver, but without success.
What do I have to change? I would like to use the SST26 in normal SPI mode.

Best regards
Thomas
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Sep 11, 2020 12:58 pm     Reply with quote

Post a small test program where you attempt to read the ID (for example)
and it fails. Tells the details of the failure.
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 5:55 am     Reply with quote

OK.
Now presumably you have changed FLASH_SIZE in the driver to 16777216?.
Remember if you have done this, and saved the new driver in your local
directory, you need to change the #include to use """, not <> or it'll
load the unmodified copy.
The protection defines will be wrong. The actual values are the same, but the
smallest protect covers the top 1/16th of the memory, not 64K.
The commands all look as if they should work correctly. The addressing
supports the full range.
As PCM programmer says, some more details please.
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 9:30 am     Reply with quote

PCM programmer wrote:
Post a small test program where you attempt to read the ID (for example)
and it fails. Tells the details of the failure.


Hello PCM programmer, how can I read the ID? I found the command ext_flash_read_id(*id) but I do not know how to use this command.
I need something like fprintf (PORT, "Manufacturer's ID: %...", ext_flash_read_id(*id)...);
I do not know how to handle the *id.
Can you please give a little sample code to print the ID?
Thanks for your help!
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 10:35 am     Reply with quote

You need to create a char array large enough to hold the ID.

char ID[4]; //should only need 3 bytes

Then just use ID in the command.

You'd need to print it as hex digits, since the first byte should be 0xBF

fprintf (PORT, "Manufacturer's ID: %x,%x,%x...", ID[0], ID[1], ID[2]);
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 11:47 am     Reply with quote

Ttelmah wrote:
You need to create a char array large enough to hold the ID.

char ID[4]; //should only need 3 bytes

Then just use ID in the command.

You'd need to print it as hex digits, since the first byte should be 0xBF

fprintf (PORT, "Manufacturer's ID: %x,%x,%x...", ID[0], ID[1], ID[2]);


Hello Ttelmah,
thanks for the code, but I only got "00" as results.
I'm using now the SST25VF080B and I know it is running well, I can write to and read from memory and I can erase. But when I'm trying to get the ID I fail.
My code is
Code:

char ID[4];
ext_flash_read_id(ID);
fprintf (PORT, "Manufacturer's ID: %x,%x,%x...", ID[0], ID[1], ID[2]);

I checked the READ-ID instruction it is 0x90.
The output is "Manufacturer's ID: 00,00,00..."

I put the code before and after ext_flash_init(); but same output.
I also tried 0xAB according to the datasheet, same result.

What I'm doing wrong?
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 12:41 pm     Reply with quote

They actually define FLASH_ID as a type in the driver, so you can use

FLASH_ID ID;

and then read with

ext_flash_read_id(ID);

then the bytes are called ID.manufacturer, ID.type and ID.capacity.

However it should have worked with the ID as given before.

00, honestly suggests a wiring problem. Either the read or write data line
shorted by a whisker. Or could be the CE line.
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sat Sep 12, 2020 2:17 pm     Reply with quote

Ttelmah wrote:
They actually define FLASH_ID as a type in the driver, so you can use

FLASH_ID ID;

and then read with

ext_flash_read_id(ID);

then the bytes are called ID.manufacturer, ID.type and ID.capacity.

However it should have worked with the ID as given before.

00, honestly suggests a wiring problem. Either the read or write data line
shorted by a whisker. Or could be the CE line.


Hello Titelmah,
thanks, but I cannot get the ID!
The chip is running properly as I told you before, ext_flash_write_byte, ext_flash_read_byte, ext_flash_address_erase, all is running very well, but ext_flash_read_id(ID) produces "00"!

By the way: the following code

FLASH_ID ID;
ext_flash_read_id(ID);

produces the error 51 a numeric expressionn must appear here in the ext_flash_read_id(ID) command line.

I'm using PCWH compiler Version 5.094
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 1:33 am     Reply with quote

Hello,

the function ext_flash_read_id(ID) can not work with the SST25VF080B for the following reasons:

- in the original sst25vf.c driver file the RDID-command is 0x9F, but the datasheet says 0x90 or 0xAB
- in the original sst25vf.c driver file the flash ID consists of 3 elements: manufacturer, type, capacity, but according to the datasheet the ID consists of manufacturer and device only
- according to the datasheet the command RDID consists of the command 0x90 or 0xAB itself and 3 address bytes (0x00000 or 0x00001) and then the device sends two bytes of ID, the manufacturer ID and the device ID

I will try to copy and change the ext_flash_read_byte or the ext_flash_read_word command to get the ID.

Any ideas or hints are welcome!
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 6:27 am     Reply with quote

You need

ext_flash_read_id(&ID);

The 0x9F, returns the Jedec ID. Is meant to be supported by the new chip.
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 6:37 am     Reply with quote

Back to the main topic replacing ST25VF080B by SST26VF064B.
The original sst25vf.c driver will not work with the SST26VF0xxB because the SST26VF0xxB is another family with a few changes in the instructions.

I will try to modify a sst26vf0xxb c-driver supplied by Microchip.

Or does anybody have a running sst26vf0xxb.c driver?

Regarding the READ-ID topic: sorry, I was mixing up JEDEC READ-ID and READ-ID. Using SST25VF080B it's running correctly now. I will try soon using SST26VF064B
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 7:01 am     Reply with quote

No, the basic instructions are identical between the chips 0x3 = READ,
0xB = high speed read, 6 = WREN, 2 = Write (the 25 only supports
single byte here, while the 26 supports a page write).
The addressing is the same. the 25, requires a 3 byte address, but only
uses the bottom 21bits of this.
All of the instructions are compatible.

You seem to be saying that you can read and write to it. If so, what more
do you want?.
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 9:45 am     Reply with quote

Hello Ttelmah,

sorry for the confusion.

The project using SST25VF080B is running properly. No problems.

Now I replaced the SST25VF080B by an SST26VF064B. Running READ-ID I got the right values (0xBF, 0x26, 0x43). But I cannot write and read to the chip, maybe I can read (result is 0xFF), so perhaps it fails writing to the device.
Here the relevant code:
Code:

ext_flash_init();
ext_flash_protect(FLASH_PROTECT_NONE);
fprintf (PORT1, "Test of SST26VF064B\n\r");
ext_flash_bulk_erase();
for (i=0; i<10; i++)
    {
     ext_flash_write_byte(i, 10*chip+i);
    }

for (i=0; i<10; i++)
    {
     fprintf (PORT1, "%u ", ext_flash_read_byte(i));
    }

Running this code using SST25VF080B I got the correct values (0, 1, 2, 3, ...9).
Running this code using SST26VF064B I only got 255 as results.

But I think there is also something different in the init routine of the SST26. The SST25... init is using the command SST25VF_POLL_WR_STATUS (DBSY, 0x80) which does not exist in the SST26VF... instruction set.
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sun Sep 13, 2020 10:13 am     Reply with quote

OK. That is really good.
The fact that you did get the ID bytes says the communication is OK.
It sounds like the status command is different. Will go and have a look.

Updated.

The 26, always uses this mode. Just remove this line.

If you are using anything larger than the byte write, then in the code
wherever it uses SST25VF_WORD_PROG replace with
SST25VF_BYTE_PROG.

The 26 runs all writes in 'page mode' which means it accepts multiple
bytes like the WORD_PROG instruction does.
Spaeth



Joined: 05 Jun 2020
Posts: 27

View user's profile Send private message

PostPosted: Tue Sep 15, 2020 2:03 pm     Reply with quote

Hello Ttelmah,

I think I found the reason why I cannot write to the SST26VF064B.
The memory is write protected after power up by default, I have to unlock the protection.
At the SST25VF080B it's done by the command ext_flash_protect(FLASH_PROTECT_NONE), but for the SST26VF064B this command does not exist, a similar command would be sending 0x98 (Global Block-Protection Unlock (ULBPR)). I will try to modify the sst25vf.c driver.

Or any idea?
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group