i2c_utils.c 1.9 KB

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