sx126x-board.c 3.4 KB

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