i2c_eeprom_read_calib.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* @brief This is a simple application for testing I2C communication on a RedPitaya
  2. *
  3. * (c) Red Pitaya http://www.redpitaya.com
  4. *
  5. * This part of code is written in C programming language.
  6. * Please visit http://en.wikipedia.org/wiki/C_(programming_language)
  7. * for more details on the language used herein.
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <unistd.h>
  13. #include "rp_hw.h"
  14. #include "rp_hw-calib.h"
  15. int main(int argc, char *argv[]){
  16. // This example shows how to work with EEPROM via I2C
  17. int res = rp_I2C_InitDevice("/dev/i2c-0",0x50); // Init i2c api.
  18. printf("Init result: %d\n",res);
  19. res = rp_I2C_setForceMode(true); // Set force mode.
  20. printf("Set force mode: %d\n",res);
  21. uint8_t wb[2] = {0,0};
  22. res = rp_I2C_IOCTL_WriteBuffer(wb,2); // Write position for reading.
  23. printf("Write 2 bytes: %d\n",res);
  24. usleep(100000);
  25. uint8_t rb[1];
  26. res = rp_I2C_IOCTL_ReadBuffer(rb,1); // Read 1 byte from I2C
  27. printf("Read 1 byte: %d\n",res);
  28. uint8_t df = rb[0];
  29. printf("Data format %d\n",df);
  30. res = rp_I2C_IOCTL_WriteBuffer(wb,2); // Write position for reading.
  31. printf("Write 2 bytes: %d\n",res);
  32. usleep(100000);
  33. rp_calib_params_t calib;
  34. if (df == 5){
  35. rp_calib_params_universal_t data;
  36. uint16_t size = sizeof(data);
  37. res = rp_I2C_IOCTL_ReadBuffer((uint8_t*)&data,size);
  38. printf("Read %d byte: %d\n",size,res);
  39. res = rp_CalibConvertEEPROM((uint8_t*)&data,size,&calib);
  40. printf("Convert calib: %d\n",res);
  41. }else{
  42. rp_eepromWpData_t data;
  43. uint16_t size = sizeof(data);
  44. res = rp_I2C_IOCTL_ReadBuffer((uint8_t*)&data,size);
  45. printf("Read %d byte: %d\n",size,res);
  46. res = rp_CalibConvertEEPROM((uint8_t*)&data,size,&calib);
  47. printf("Convert calib: %d\n",res);
  48. }
  49. rp_CalibPrint(&calib);
  50. return 0;
  51. }