i2c_utils.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "i2c_utils.h"
  2. #include "luat_i2c.h"
  3. static uint8_t i2c_tools_id = 0;
  4. uint8_t strtonum(const char* str){
  5. uint8_t data;
  6. if (strcmp(str, "0x")){
  7. data = (uint8_t)strtol(str, NULL, 0);
  8. }else{
  9. data = atoi(str);
  10. }
  11. return data;
  12. }
  13. void i2c_help(void){
  14. printf("\n---------------i2c tools help:---------------\n");
  15. printf("i2c tools scan i2c_id\n");
  16. printf("i2c tools recv i2c_id address register [len=1]\n");
  17. printf("i2c tools send i2c_id address [register] data_0 data_1 ...\n\n");
  18. }
  19. uint8_t i2c_init(const uint8_t i2c_id){
  20. i2c_tools_id = i2c_id;
  21. return (luat_i2c_setup(i2c_tools_id, 1, NULL));
  22. }
  23. uint8_t i2c_probe(char addr){
  24. uint8_t data[2] = {0x00};
  25. return (luat_i2c_send(i2c_tools_id, addr, data, 2,1) ==0);
  26. }
  27. uint8_t i2c_write(char addr, uint8_t* data, int len){
  28. return (luat_i2c_send(i2c_tools_id, addr, data, len,1) == 0);
  29. }
  30. uint8_t i2c_read(uint8_t addr, uint8_t reg, uint8_t* buffer, uint8_t len){
  31. int ret = 0;
  32. ret = luat_i2c_send(i2c_tools_id, addr, &reg, 1,0);
  33. if (ret != 0)return -1;
  34. ret = luat_i2c_recv(i2c_tools_id, addr, buffer, len);
  35. if (ret != 0)return -1;
  36. return 0;
  37. }
  38. void i2c_scan(void){
  39. printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\n");
  40. for(unsigned char i=0; i<8; i++){
  41. printf("%d0: ", i);
  42. for(unsigned char j=0; j<16; j++){
  43. char addr = i*16+j;
  44. if( i2c_probe(addr) == 1){
  45. printf("%02X", addr);
  46. }else{
  47. printf("--");
  48. }
  49. printf(" ");
  50. }
  51. printf("\n");
  52. }
  53. }