eeprom.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "bsp/i2c.h"
  2. #include "eeprom.h"
  3. #define I2C_ADDR 0XA4
  4. #define PAGE_SIZE 16
  5. static int eeprom_write_page(u16 addr,u8 *data,u8 len);
  6. int eeprom_write_bytes(u16 addr, u8 *data, int len){
  7. U16 remain_len = len;
  8. while(remain_len > 0){
  9. U16 w_len = (remain_len > PAGE_SIZE)?PAGE_SIZE:remain_len;
  10. if (eeprom_write_page(addr, data, w_len) < 0){
  11. return -1;
  12. }
  13. addr+= w_len;
  14. data += w_len;
  15. remain_len -= w_len;
  16. }
  17. return 0;
  18. }
  19. int eeprom_read_bytes(u16 addr, u8 *data, int len){
  20. uint8_t device_addr = I2C_ADDR | ((addr >>8) << 1);
  21. int try_count = 100;
  22. while(0 >= shark_i2c_read_nbytes(0, device_addr, (uint8_t)(addr&0xFF), data, len)){
  23. if (try_count-- <= 0){
  24. return -1;
  25. }
  26. };
  27. return 0;
  28. }
  29. /* use page write to improve write time */
  30. static int eeprom_write_page(u16 addr,u8 *data,u8 len){
  31. uint8_t device_addr = I2C_ADDR | ((addr >>8) << 1);
  32. int try_count = 100;
  33. while(0 >= shark_i2c_write_nbytes(0, device_addr, (uint8_t)(addr&0xFF), data, len)){
  34. if (try_count-- <= 0){
  35. return -1;
  36. }
  37. };
  38. return 0;
  39. }
  40. #if 0
  41. #define ADDR_START (2<<7)
  42. static U8 buffr[128];
  43. static int index = 0;
  44. static int _AT24CXX_test(void)
  45. {
  46. int i=0;
  47. char wdata = 0x5A;
  48. if (index % 2 == 1){
  49. wdata = 0xA5;
  50. }
  51. for(i=0;i<128;i++)
  52. {
  53. buffr[i] = wdata;
  54. }
  55. eeprom_write_bytes(ADDR_START,buffr,128);
  56. memset(buffr,0,128);
  57. eeprom_read_bytes(ADDR_START,buffr,128);
  58. for(i=0;i<128;i++)
  59. {
  60. if (buffr[i] != wdata){
  61. return -1;
  62. }
  63. }
  64. return 0;
  65. }
  66. void AT24CXX_test(void){
  67. while(_AT24CXX_test() == 0){
  68. index++;
  69. };
  70. }
  71. #endif