hal_i2c_interface.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "driver.h"
  2. #include <linux/types.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "com_gpio.h"
  6. #include "hal_interface_api.h"
  7. #include "linux/fcntl.h"
  8. /*
  9. bus: 1,2,3
  10. address: 8bit
  11. */
  12. int stm32_i2c_master_write(int fd, uint8_t address, uint8_t *pBuf, uint16_t size)
  13. {
  14. int ret = 0;
  15. i2c_arg_t i2c_arg;
  16. i2c_arg.DevAddress = address;
  17. i2c_arg.WriteLen = size;
  18. memcpy(i2c_arg.Buf, pBuf, size);
  19. ret = ioctl(fd, I2C_MASTER_TRANSFER, &i2c_arg);
  20. // if(ret == -1)
  21. // {
  22. // printf("Write i2c failed! addr %#02x\n", address);
  23. // }
  24. return ret;
  25. }
  26. int stm32_i2c_master_read(int fd, uint8_t address, uint8_t *pBuf, uint16_t size)
  27. {
  28. int ret;
  29. i2c_arg_t i2c_arg;
  30. i2c_arg.DevAddress = address;
  31. i2c_arg.ReadLen = size;
  32. ret = ioctl(fd, I2C_MASTER_RECEIVE, &i2c_arg);
  33. // if(ret == -1)
  34. // {
  35. // //printf("Read i2c failed!\n");
  36. // ;
  37. // }
  38. memcpy(pBuf, i2c_arg.Buf, size);
  39. return ret;
  40. }
  41. int stm32_i2c_set_addr(int fd, uint8_t OwnAddress)
  42. {
  43. int ret;
  44. i2c_arg_t i2c_arg;
  45. i2c_arg.OwnAddress1 = OwnAddress;
  46. ret = ioctl(fd, SET_I2C_ADDR, &i2c_arg);
  47. if(ret == -1)
  48. {
  49. printf("Set i2c address failed!\n");
  50. }
  51. return 0;
  52. }
  53. //return receive size
  54. int stm32_i2c_slave_recv(int fd, uint8_t *pBuf)
  55. {
  56. int ret = 0;
  57. i2c_arg_t i2c_arg;
  58. ret = ioctl(fd, I2C_SLAVE_RECEIVE_IT, &i2c_arg);
  59. if(ret == -1)
  60. {
  61. printf("I2c slave receive failed!\n");
  62. return -1;
  63. }
  64. memcpy(pBuf, i2c_arg.Buf, i2c_arg.ReadLen);
  65. // int i;
  66. // printf("i2c recv: ");
  67. // for(i=0;i<i2c_arg.Size;i++)
  68. // printf("%#x ", pBuf[i]);
  69. // printf("\n");
  70. return i2c_arg.ReadLen;
  71. }
  72. int stm32_i2c_master_write_read(int fd, uint8_t address, uint8_t *pWrBuf, uint8_t writeLen, uint8_t *pRdBuf, uint8_t readLen)
  73. {
  74. int ret = 0;
  75. i2c_arg_t i2c_arg;
  76. i2c_arg.DevAddress = address;
  77. i2c_arg.WriteLen = writeLen;
  78. i2c_arg.ReadLen = readLen;
  79. memcpy(i2c_arg.Buf, pWrBuf, writeLen);
  80. ret = ioctl(fd, I2C_MASTER_TRANSFER_RECEIVE, &i2c_arg);
  81. if(ret == -1)
  82. {
  83. printf("i2c master write read failed!\n");
  84. return -1;
  85. }
  86. memcpy(pRdBuf, i2c_arg.Buf, readLen);
  87. return ret;
  88. }