sx126x-board.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include "myRadio_gpio.h"
  2. #include "radio.h"
  3. #include "sx126x.h"
  4. #include "sx126x-board.h"
  5. void HAL_Delay_nMS(uint32_t time_ms)
  6. {
  7. delay1ms(time_ms);
  8. }
  9. void SX126xReset( void )
  10. {
  11. HAL_Delay_nMS( 10 );
  12. RF_SX126x_RST_L();
  13. HAL_Delay_nMS( 20 );
  14. RF_SX126x_RST_H();
  15. HAL_Delay_nMS( 10 );
  16. }
  17. void SX126xWaitOnBusy( void )
  18. {
  19. while(READ_RF_SX126x_BUSY());
  20. }
  21. void SX126xWakeup( void )
  22. {
  23. BOARD_SPI_NSS_L();
  24. SpiReadWrite(RADIO_GET_STATUS);
  25. SpiReadWrite(0);
  26. BOARD_SPI_NSS_H();
  27. // Wait for chip to be ready.
  28. SX126xWaitOnBusy( );
  29. }
  30. void SX126xWriteCommand( RadioCommands_t command, uint8_t *buffer, uint16_t size )
  31. {
  32. SX126xCheckDeviceReady( );
  33. BOARD_SPI_NSS_L();
  34. SpiReadWrite(command );
  35. SpiWriteData(buffer, size);
  36. BOARD_SPI_NSS_H();
  37. if( command != RADIO_SET_SLEEP )
  38. {
  39. SX126xWaitOnBusy( );
  40. }
  41. }
  42. void SX126xReadCommand( RadioCommands_t command, uint8_t *buffer, uint16_t size )
  43. {
  44. SX126xCheckDeviceReady( );
  45. BOARD_SPI_NSS_L();
  46. SpiReadWrite(command );
  47. SpiReadWrite(0x00);
  48. SpiReadData(buffer, size);
  49. BOARD_SPI_NSS_H();
  50. SX126xWaitOnBusy( );
  51. }
  52. void SX126xWriteRegisters( uint16_t address, uint8_t *buffer, uint16_t size )
  53. {
  54. SX126xCheckDeviceReady( );
  55. BOARD_SPI_NSS_L();
  56. SpiReadWrite(RADIO_WRITE_REGISTER);
  57. SpiReadWrite(( address & 0xFF00 ) >> 8);
  58. SpiReadWrite(address & 0x00FF);
  59. SpiWriteData(buffer, size);
  60. BOARD_SPI_NSS_H();
  61. SX126xWaitOnBusy( );
  62. }
  63. void SX126xWriteRegister( uint16_t address, uint8_t value )
  64. {
  65. SX126xWriteRegisters( address, &value, 1 );
  66. }
  67. void SX126xReadRegisters( uint16_t address, uint8_t *buffer, uint16_t size )
  68. {
  69. SX126xCheckDeviceReady( );
  70. BOARD_SPI_NSS_L();
  71. SpiReadWrite(RADIO_READ_REGISTER);
  72. SpiReadWrite(( address & 0xFF00 ) >> 8);
  73. SpiReadWrite(address & 0x00FF);
  74. SpiReadWrite(0);
  75. SpiReadData(buffer, size);
  76. BOARD_SPI_NSS_H();
  77. SX126xWaitOnBusy( );
  78. }
  79. uint8_t SX126xReadRegister( uint16_t address )
  80. {
  81. uint8_t data;
  82. SX126xReadRegisters( address, &data, 1 );
  83. return data;
  84. }
  85. void SX126xWriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size )
  86. {
  87. SX126xCheckDeviceReady( );
  88. BOARD_SPI_NSS_L();
  89. SpiReadWrite(RADIO_WRITE_BUFFER);
  90. SpiReadWrite(offset);
  91. SpiWriteData(buffer, size);
  92. BOARD_SPI_NSS_H();
  93. SX126xWaitOnBusy( );
  94. }
  95. void SX126xReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size )
  96. {
  97. SX126xCheckDeviceReady( );
  98. BOARD_SPI_NSS_L();
  99. SpiReadWrite(RADIO_READ_BUFFER);
  100. SpiReadWrite(offset);
  101. SpiReadWrite(0);
  102. SpiReadData(buffer, size);
  103. BOARD_SPI_NSS_H();
  104. SX126xWaitOnBusy( );
  105. }
  106. void SX126xSetRfTxPower( int8_t power )
  107. {
  108. SX126xSetTxParams( power, RADIO_RAMP_200_US );
  109. }
  110. uint8_t SX126xGetPaSelect( uint32_t channel )
  111. {
  112. // if( GpioRead( &DeviceSel ) == 1 )
  113. // {
  114. // return SX1261;
  115. // }
  116. // else
  117. // {
  118. // return SX1262;
  119. // }
  120. return SX1262;
  121. }
  122. void SX126xAntSwOn( void )
  123. {
  124. //GpioInit( &AntPow, ANT_SWITCH_POWER, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_UP, 1 );
  125. }
  126. void SX126xAntSwOff( void )
  127. {
  128. // GpioInit( &AntPow, ANT_SWITCH_POWER, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
  129. }
  130. bool SX126xCheckRfFrequency( uint32_t frequency )
  131. {
  132. // Implement check. Currently all frequencies are supported
  133. return true;
  134. }