RE: [AVR-Chat] SPI interface to AT45DB161
2008-09-09 by Tim Mitchell
Moataz Hussein wrote: > Hello, > I am building a data logging system to record temperaure readings and > store them on a flash. > I am using ATmega 16 and AT45DB161D memory. > I have some points which are not clear though I studied the ATDB161 > datasheet. > > > Please correct me. > How can I write for example 10 bytes of data to the memory? then > store another 10 bytes after the first 10 bytes? > I will give command to write page through buffer and send the first > 10 bytes, which will be stored in page 1 for example. How to do the > next step? > > > How can I read the 20 bytes which are prevoiusly stored? > I will send a command to read the page the contain the stored data, > checking the SPIF when set read the first byte and so on.. > > > I Have to check SPIF after each byte to be sure that it is sent or > recieved? The AT45DB... dataflash chips have a RAM buffer to temporarily store data before you write it to the flash (or when reading it from the flash). But the flash can only be written in a whole page of 524 (? I think) bytes. So you have 2 options, you can either fill the ram buffer before you write the flash page all in one go, or you need to read back the flash page into the buffer, modify your 10 bytes and write it back to the flash again. The first way is best if you can be sure you are not going to lose power. The second way will mean you don't lose data if the power is turned off but will mean more "wear" of the flash. The commands for read block to buffer, write block to buffer etc are all listed in the data sheet. If you are writing or reading a sequence of bytes to or from the RAM buffer, you don't have to check SPIF each time - just once before you start to make sure the chip is not busy with a flash write or erase operation. -- Tim Mitchell