| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "bsp/i2c.h"
- #include "eeprom.h"
- #define I2C_ADDR 0XA4
- #define PAGE_SIZE 16
- static int eeprom_write_page(u16 addr,u8 *data,u8 len);
- int eeprom_write_bytes(u16 addr, u8 *data, int len){
- U16 remain_len = len;
- while(remain_len > 0){
- U16 w_len = (remain_len > PAGE_SIZE)?PAGE_SIZE:remain_len;
- if (eeprom_write_page(addr, data, w_len) < 0){
- return -1;
- }
- addr+= w_len;
- data += w_len;
- remain_len -= w_len;
- }
- return 0;
- }
- int eeprom_read_bytes(u16 addr, u8 *data, int len){
- uint8_t device_addr = I2C_ADDR | ((addr >>8) << 1);
- int try_count = 100;
- while(0 >= shark_i2c_read_nbytes(0, device_addr, (uint8_t)(addr&0xFF), data, len)){
- if (try_count-- <= 0){
- return -1;
- }
- };
- return 0;
- }
- /* use page write to improve write time */
- static int eeprom_write_page(u16 addr,u8 *data,u8 len){
- uint8_t device_addr = I2C_ADDR | ((addr >>8) << 1);
- int try_count = 100;
- while(0 >= shark_i2c_write_nbytes(0, device_addr, (uint8_t)(addr&0xFF), data, len)){
- if (try_count-- <= 0){
- return -1;
- }
- };
- return 0;
- }
- #if 0
- #define ADDR_START (2<<7)
- static U8 buffr[128];
- static int index = 0;
- static int _AT24CXX_test(void)
- {
- int i=0;
- char wdata = 0x5A;
- if (index % 2 == 1){
- wdata = 0xA5;
- }
- for(i=0;i<128;i++)
- {
- buffr[i] = wdata;
- }
-
- eeprom_write_bytes(ADDR_START,buffr,128);
-
- memset(buffr,0,128);
-
- eeprom_read_bytes(ADDR_START,buffr,128);
-
- for(i=0;i<128;i++)
- {
- if (buffr[i] != wdata){
- return -1;
- }
- }
- return 0;
- }
- void AT24CXX_test(void){
- while(_AT24CXX_test() == 0){
- index++;
- };
- }
- #endif
|