View previous topic :: View next topic |
Author |
Message |
maria100
Joined: 01 Feb 2012 Posts: 63
|
UART > i2c EEPROM |
Posted: Sun Mar 11, 2012 6:55 pm |
|
|
Hello. I`m trying to make a PIC 18F25K22 take the data from UART and write it to a external 24lc1025 EEPROM. I use a ring buffer from the EX_SISR.C example file to store the rs232 data , but i cannot understand how to take that relativly big buffer and write it in the eeprom. I had succeed to write and read a 8 bit value from it with the read_ext_eeprom and write_ext_eeprom commands...but now I`m stuck..also i have a question regarding the incrementing of the address of the eeprom..meaning ..after i reset power my program will know where is the next location to write ( i dont want to overwrite my old data by writing again from 0x00)...a application sample or something regarding these two problems will be very very helpful..thank you forum! |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Sun Mar 11, 2012 7:21 pm |
|
|
As far as transferring the data from RAM (buffer) to EEPROM (external storage), check the EEPROM datasheet and see if there's a 'bulk' or 'block' write mode, most do. Eg: writing 256 bytes or more at one time.This will decrease the number and time required to write all the data.
You're the programmer, so it's up to you to keep track of the contents of the EEPROM, and how it's done is up to you. Some use the first few bytes of external EEPROM to store the 'last address used'. How many bytes depends upon size of the eeprom. If the data doesn't get altered much, you could use the PICs internal EEPROM to hold the 'last address used' data. Be careful though as it has limited read/write cycles, check the datasheet, do the math before you destroy the PIC. If you have an external RTC(like the DS1307) with battery backup, you can also use the NVRAM of the RTC to store the data.
There's 3 choices..each has 'pros and cons'..you'll have to decide which is best for your application. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Mon Mar 12, 2012 3:03 am |
|
|
Seriously, also consider using an FRAM, rather than an EEPROM. If you use single character writes, at 9600bps, typically four characters could arrive in the time taken to write one byte!. Fortunately multi byte writing would 'help' here, but you could still run into timing issues.
Best Wishes |
|
|
maria100
Joined: 01 Feb 2012 Posts: 63
|
|
Posted: Mon Mar 12, 2012 4:22 am |
|
|
I have check out the FRAM, but is not a solution for my project. Does CCS provide some library for multi-byte writing to 24c1025? Because I did not find something like this. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Mon Mar 12, 2012 12:10 pm |
|
|
That EEPROM has a 'page mode' of 128 bytes which allows you to send it 128 bytes of data, then issue a single write. It is explained in the datasheet and is a common method of saving data.
Depending on what you're using this data for, you might consider a Vinculum USB flashdrive module. They're about $20, simple fast serial communication, 'unlimited' data storage, and easily read from any PC that has USB ports.
If your project is some kind of 'data logger', it could easily suit you very well. |
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Tue Mar 13, 2012 4:28 pm |
|
|
I would second TTELMAH s comments RE: FRAM - and having sampled
parts for a design - attest to its speed. EEPROM is always less fun to use than you think, particularly when you have bursts of data to write AND not enough PIC RAM to build a page_write.
Only TWO things you may discover of a negative nature - ::
1- your BOM will suffer a very serious hit to the $$ / unit column.
2- you are facing a sole source vendor issue.
ESPECIALLY true re $$ - if you need 5V operation - in the 1mb size and above. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Tue Mar 13, 2012 5:07 pm |
|
|
#3..I think all FRAM devices are SMT !! Too small for my eyes to see to solder ! I checked some months ago....so I might be wrong..
That was another reason why I went to Vinculum modules, I can see them !!
Also good for 5 volt systems... |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Wed Mar 14, 2012 2:56 am |
|
|
There are DIL versions available, in a few types (unfortunately, getting fewer), and some parts are multi source. Fujitsu makes some as well as RamTron. A couple of third parties also offer some of the SM parts on DIL carriers. DIL versions are getting rarer and rarer. This is true for other memory types as well though....
Best Wishes |
|
|
maria100
Joined: 01 Feb 2012 Posts: 63
|
|
Posted: Wed Mar 14, 2012 9:06 am |
|
|
I have check out Vinculum but didn't understand quite right how they work...can you elaborate a bit?
The primary requirement is that the memory could be a easy to solder package and not too big...like a SSOP 8...Vinculum is quite big... |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Wed Mar 14, 2012 10:16 am |
|
|
The Vinculum chips are 'interface' devices allowing any computer to communicate/control any type of USB devices using either SPI or UART style communications. The computer (say a PIC) can be either Host or Slave or even both to the USB devices. Very versitile to say the least!
The 'typical' use is to allow PICs easy, fast, reliable access to flashdrives. NO driver is required, simple commands allow any disk activity(read,write,md,chkdsk,ect).
In my case, the 'PIC based datalogger' stores about 5 years worth of data from many sensors in CSV formatted files. Simply by plugging that drive into PC, Excel opens up the data for instant viewing.
As for size, the chip is about baby fingernail size (check FTDI website). I buy the premade modules with dual USB connectors with either SIP or DIP pinouts. My eyes can't see the SMD packages anymore and I like BIG PCBs, easier to build, test and repair.
It appears you want a fair amount of storage, but to what purpose? If just for the PIC, then FRAM or E2PROM may be fine but if you need to transfer the data to say a PC, then Vinculums offer an easy, universal system.
Yes, more money upfront BUT consider R&D labour, programming code, etc. You can easily spend thousands on that or $20 for a Vinculum. |
|
|
maria100
Joined: 01 Feb 2012 Posts: 63
|
|
Posted: Sat Mar 24, 2012 4:38 am |
|
|
Hi again, i have successfully solve all my "problems" only have one now. I really dont seem to find on the forum or on the CCS PDF help file how to write a EXTERNAL EEPROM PAGE (24LC1025) , 128 byte at once,so i can get rid of timing issues. Please , an example , a hint...everything..Thank you! |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1345
|
|
Posted: Sat Mar 24, 2012 9:22 am |
|
|
maria100 wrote: | Hi again, i have successfully solve all my "problems" only have one now. I really dont seem to find on the forum or on the CCS PDF help file how to write a EXTERNAL EEPROM PAGE (24LC1025) , 128 byte at once,so i can get rid of timing issues. Please , an example , a hint...everything..Thank you! |
I typically just look at the data sheet. The CCS eeprom drivers write one byte at a time. Look at the difference in the data sheet for one byte versus multiple bytes (they give examples of both). I just use a for loop at the spot that would make sense based on the data sheet. The only thing past that you need to do is manage when you reach a page boundary. You can use modulo math (will be fast because pages are powers of 2) and some basic addition/subtraction to figure out if you are at a page boundary. When you reach a page boundary, you have to stop transmission, and start it up again, UNLESS you are only writing pages, then all you have to worry about is the looping and making sure the write address is on a page boundary. |
|
|
|