luat_spi.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef LUAT_SPI_H
  2. #define LUAT_SPI_H
  3. #include "luat_base.h"
  4. typedef struct luat_spi
  5. {
  6. /* data */
  7. int id; // id
  8. int CPHA; // CPHA
  9. int CPOL; // CPOL
  10. int dataw; // 数据宽度
  11. int bit_dict;// 高低位顺序 可选,默认高位在前
  12. int master; // 主模式 可选,默认主
  13. int mode; // 全双工 可选,默认全双工
  14. int bandrate;// 最大频率20M
  15. int cs; // cs控制引脚
  16. } luat_spi_t;
  17. typedef struct luat_spi_device
  18. {
  19. uint8_t bus_id;
  20. luat_spi_t spi_config;
  21. void* user_data;
  22. } luat_spi_device_t;
  23. typedef struct luat_fatfs_spi
  24. {
  25. uint8_t type;
  26. uint8_t spi_id;
  27. uint8_t spi_cs;
  28. uint8_t nop;
  29. uint32_t fast_speed;
  30. uint8_t transfer_buf[7];
  31. luat_spi_device_t * spi_device;
  32. }luat_fatfs_spi_t;
  33. /**
  34. spiId,--串口id
  35. cs,
  36. 0,--CPHA
  37. 0,--CPOL
  38. 8,--数据宽度
  39. 20000000,--最大频率20M
  40. spi.MSB,--高低位顺序 可选,默认高位在前
  41. spi.master,--主模式 可选,默认主
  42. spi.full,--全双工 可选,默认全双工
  43. */
  44. //初始化配置SPI各项参数,并打开SPI
  45. //成功返回0
  46. int luat_spi_setup(luat_spi_t* spi);
  47. //收发SPI数据尝试启动DMA模式
  48. int luat_spi_config_dma(int spi_id, uint32_t tx_channel, uint32_t rx_channel);
  49. //关闭SPI,成功返回0
  50. int luat_spi_close(int spi_id);
  51. //收发SPI数据,返回接收字节数
  52. int luat_spi_transfer(int spi_id, const char* send_buf, size_t send_length, char* recv_buf, size_t recv_length);
  53. //收SPI数据,返回接收字节数
  54. int luat_spi_recv(int spi_id, char* recv_buf, size_t length);
  55. //发SPI数据,返回发送字节数
  56. int luat_spi_send(int spi_id, const char* send_buf, size_t length);
  57. int luat_spi_change_speed(int spi_id, uint32_t speed);
  58. //非阻塞SPI收发数据
  59. int luat_spi_no_block_transfer(int spi_id, uint8_t *tx_buff, uint8_t *rx_buff, size_t len, void *CB, void *pParam);
  60. // 初始化总线
  61. int luat_spi_bus_setup(luat_spi_device_t* spi_dev);
  62. // 初始化设备
  63. int luat_spi_device_setup(luat_spi_device_t* spi_dev);
  64. // 配置设备
  65. int luat_spi_device_config(luat_spi_device_t* spi_dev);
  66. //关闭SPI设备,成功返回0
  67. int luat_spi_device_close(luat_spi_device_t* spi_dev);
  68. //收发SPI数据,返回接收字节数
  69. int luat_spi_device_transfer(luat_spi_device_t* spi_dev, const char* send_buf, size_t send_length, char* recv_buf, size_t recv_length);
  70. //收SPI数据,返回接收字节数
  71. int luat_spi_device_recv(luat_spi_device_t* spi_dev, char* recv_buf, size_t length);
  72. //发SPI数据,返回发送字节数
  73. int luat_spi_device_send(luat_spi_device_t* spi_dev, const char* send_buf, size_t length);
  74. #endif