hal_i2c_interface.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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.Size = 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!\n");
  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.Size = size;
  32. ret = ioctl(fd, I2C_MASTER_RECEIVE, &i2c_arg);
  33. if(ret == -1)
  34. {
  35. printf("Read i2c failed!\n");
  36. }
  37. memcpy(pBuf, i2c_arg.buf, size);
  38. return 0;
  39. }
  40. int stm32_i2c_set_addr(int fd, uint8_t OwnAddress)
  41. {
  42. int ret;
  43. i2c_arg_t i2c_arg;
  44. i2c_arg.OwnAddress1 = OwnAddress;
  45. ret = ioctl(fd, SET_I2C_ADDR, &i2c_arg);
  46. if(ret == -1)
  47. {
  48. printf("Set i2c address failed!\n");
  49. }
  50. return 0;
  51. }
  52. //return receive size
  53. int stm32_i2c_slave_recv(int fd, uint8_t *pBuf)
  54. {
  55. int ret = 0;
  56. i2c_arg_t i2c_arg;
  57. ret = ioctl(fd, I2C_SLAVE_RECEIVE_IT, &i2c_arg);
  58. if(ret == -1)
  59. {
  60. printf("I2c slave receive failed!\n");
  61. return -1;
  62. }
  63. memcpy(pBuf, i2c_arg.buf, i2c_arg.Size);
  64. int i;
  65. printf("i2c recv: ");
  66. for(i=0;i<i2c_arg.Size;i++)
  67. printf("%#x ", pBuf[i]);
  68. printf("\n");
  69. return i2c_arg.Size;
  70. }