I had made a similar optimization in a couple firmware's I'd written.
The Keil FW framework had a one at a time write I think for some
historical reason and originally fx2lib provided equal/similar
functionality. Perhaps there was an eeprom that wouldn't work correctly
writing multiple bytes at a time or something. Anyhow, we saw the same
thing. We were able to write an entire prom out in a second or two.
On 6/15/11 6:45 AM, S S wrote:
> Hi Folks,
>
> Could I suggest we modify the i2c eeprom_write function in i2c.c to the
> code given below?
>
> The current function writes one byte at a time on the eeprom. This is
> less than optimum as each write triggers a refresh on the eeprom which
> refreshes a whole page (64 bytes).
> That is sub-optimal on two accounts: 1- the eeprom endurance is
> specified in number of page refresh (OK at 1 million it might not be an
> issue) but 2- it takes about 64 times longer than needed to write a
> program into the eeprom.
> Modifying the function to write 64 bytes at a time (which fit nicely in
> one EP0 transfer) cuts down the program writing time from 73s down to 2s.
>
> Cheers,
>
> Sébastien
>
> BOOL eeprom_write(BYTE prom_addr, WORD addr, WORD length, BYTE* buf)
> {
> BYTE addr_len=0;
> BYTE addr_buffer[2];
> BYTE bs;
> BYTE *data_buffer_ptr = buf;
> BYTE *last_data_ptr = buf + length;
>
> if (EEPROM_TWO_BYTE) {
> addr_len = 2;
> addr_buffer[0] = MSB(addr);
> addr_buffer[1] = LSB(addr);
> }
> else {
> addr_len = 1;
> addr_buffer[0] = LSB(addr);
> }
>
> while ( data_buffer_ptr < last_data_ptr ) {
> if ( (last_data_ptr - data_buffer_ptr) > MAX_EEP_WRITE) { // Should not
> be the case if data is from an EP0 transfer
> bs = MAX_EEP_WRITE;
> }
> else bs = last_data_ptr - data_buffer_ptr;
> if ( ! i2c_write ( prom_addr, addr_len, addr_buffer, bs, data_buffer_ptr
> ) ) return FALSE;
> addr += bs; // Potentially more data to come so remember to increase the
> address and buffer pointer
> data_buffer_ptr += bs;
> }
> return TRUE;
> }
>
>
>
>
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
>
>
>
> _______________________________________________
> Fx2lib-devel mailing list
> Fx2...@pu...
> https://lists.sourceforge.net/lists/listinfo/fx2lib-devel
|