Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.

Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo

Currently supported boards:

Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:

  • Unmount resistor R4
  • Mount resistor R7

Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!

This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).

Committer:
Wolfgang Betz
Date:
Thu Oct 13 15:41:39 2016 +0200
Revision:
0:4fb29d9ee571
Child:
4:07537ca85c66
First compiling version (without warnings)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 0:4fb29d9ee571 1 /**
Wolfgang Betz 0:4fb29d9ee571 2 ******************************************************************************
Wolfgang Betz 0:4fb29d9ee571 3 * @file radio_spi.c
Wolfgang Betz 0:4fb29d9ee571 4 * @author System Lab - NOIDA
Wolfgang Betz 0:4fb29d9ee571 5 * @version V1.0.0
Wolfgang Betz 0:4fb29d9ee571 6 * @date 15-May-2014
Wolfgang Betz 0:4fb29d9ee571 7 * @brief This file provides code for the configuration of the SPI instances.
Wolfgang Betz 0:4fb29d9ee571 8 ******************************************************************************
Wolfgang Betz 0:4fb29d9ee571 9 * @attention
Wolfgang Betz 0:4fb29d9ee571 10 *
Wolfgang Betz 0:4fb29d9ee571 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
Wolfgang Betz 0:4fb29d9ee571 12 *
Wolfgang Betz 0:4fb29d9ee571 13 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 0:4fb29d9ee571 14 * are permitted provided that the following conditions are met:
Wolfgang Betz 0:4fb29d9ee571 15 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 0:4fb29d9ee571 16 * this list of conditions and the following disclaimer.
Wolfgang Betz 0:4fb29d9ee571 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 0:4fb29d9ee571 18 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 0:4fb29d9ee571 19 * and/or other materials provided with the distribution.
Wolfgang Betz 0:4fb29d9ee571 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 0:4fb29d9ee571 21 * may be used to endorse or promote products derived from this software
Wolfgang Betz 0:4fb29d9ee571 22 * without specific prior written permission.
Wolfgang Betz 0:4fb29d9ee571 23 *
Wolfgang Betz 0:4fb29d9ee571 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 0:4fb29d9ee571 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 0:4fb29d9ee571 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 0:4fb29d9ee571 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 0:4fb29d9ee571 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 0:4fb29d9ee571 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 0:4fb29d9ee571 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 0:4fb29d9ee571 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 0:4fb29d9ee571 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 0:4fb29d9ee571 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 0:4fb29d9ee571 34 *
Wolfgang Betz 0:4fb29d9ee571 35 ******************************************************************************
Wolfgang Betz 0:4fb29d9ee571 36 */
Wolfgang Betz 0:4fb29d9ee571 37
Wolfgang Betz 0:4fb29d9ee571 38
Wolfgang Betz 0:4fb29d9ee571 39 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 0:4fb29d9ee571 40 #include "radio_spi.h"
Wolfgang Betz 0:4fb29d9ee571 41
Wolfgang Betz 0:4fb29d9ee571 42 #include "SimpleSpirit1.h"
Wolfgang Betz 0:4fb29d9ee571 43
Wolfgang Betz 0:4fb29d9ee571 44
Wolfgang Betz 0:4fb29d9ee571 45 /**
Wolfgang Betz 0:4fb29d9ee571 46 * @addtogroup BSP
Wolfgang Betz 0:4fb29d9ee571 47 * @{
Wolfgang Betz 0:4fb29d9ee571 48 */
Wolfgang Betz 0:4fb29d9ee571 49
Wolfgang Betz 0:4fb29d9ee571 50
Wolfgang Betz 0:4fb29d9ee571 51 /**
Wolfgang Betz 0:4fb29d9ee571 52 * @addtogroup X-NUCLEO-IDS02Ax
Wolfgang Betz 0:4fb29d9ee571 53 * @{
Wolfgang Betz 0:4fb29d9ee571 54 */
Wolfgang Betz 0:4fb29d9ee571 55
Wolfgang Betz 0:4fb29d9ee571 56
Wolfgang Betz 0:4fb29d9ee571 57 /**
Wolfgang Betz 0:4fb29d9ee571 58 * @defgroup RADIO_SPI_Private_TypesDefinitions RADIO_SPI Private Types Definitions
Wolfgang Betz 0:4fb29d9ee571 59 * @{
Wolfgang Betz 0:4fb29d9ee571 60 */
Wolfgang Betz 0:4fb29d9ee571 61
Wolfgang Betz 0:4fb29d9ee571 62 /**
Wolfgang Betz 0:4fb29d9ee571 63 * @}
Wolfgang Betz 0:4fb29d9ee571 64 */
Wolfgang Betz 0:4fb29d9ee571 65
Wolfgang Betz 0:4fb29d9ee571 66
Wolfgang Betz 0:4fb29d9ee571 67 /**
Wolfgang Betz 0:4fb29d9ee571 68 * @defgroup RADIO_SPI_Private_Defines RADIO_SPI Private Defines
Wolfgang Betz 0:4fb29d9ee571 69 * @{
Wolfgang Betz 0:4fb29d9ee571 70 */
Wolfgang Betz 0:4fb29d9ee571 71
Wolfgang Betz 0:4fb29d9ee571 72 /**
Wolfgang Betz 0:4fb29d9ee571 73 * @}
Wolfgang Betz 0:4fb29d9ee571 74 */
Wolfgang Betz 0:4fb29d9ee571 75
Wolfgang Betz 0:4fb29d9ee571 76
Wolfgang Betz 0:4fb29d9ee571 77 /**
Wolfgang Betz 0:4fb29d9ee571 78 * @defgroup RADIO_SPI_Private_Macros RADIO_SPI Private Macros
Wolfgang Betz 0:4fb29d9ee571 79 * @{
Wolfgang Betz 0:4fb29d9ee571 80 */
Wolfgang Betz 0:4fb29d9ee571 81
Wolfgang Betz 0:4fb29d9ee571 82 /**
Wolfgang Betz 0:4fb29d9ee571 83 * @}
Wolfgang Betz 0:4fb29d9ee571 84 */
Wolfgang Betz 0:4fb29d9ee571 85
Wolfgang Betz 0:4fb29d9ee571 86
Wolfgang Betz 0:4fb29d9ee571 87 /**
Wolfgang Betz 0:4fb29d9ee571 88 * @defgroup RADIO_SPI_Private_Variables RADIO_SPI Private Variables
Wolfgang Betz 0:4fb29d9ee571 89 * @{
Wolfgang Betz 0:4fb29d9ee571 90 */
Wolfgang Betz 0:4fb29d9ee571 91
Wolfgang Betz 0:4fb29d9ee571 92 /**
Wolfgang Betz 0:4fb29d9ee571 93 * @}
Wolfgang Betz 0:4fb29d9ee571 94 */
Wolfgang Betz 0:4fb29d9ee571 95
Wolfgang Betz 0:4fb29d9ee571 96
Wolfgang Betz 0:4fb29d9ee571 97 /**
Wolfgang Betz 0:4fb29d9ee571 98 * @defgroup RADIO_SPI_Private_FunctionPrototypes RADIO_SPI Private Function Prototypes
Wolfgang Betz 0:4fb29d9ee571 99 * @{
Wolfgang Betz 0:4fb29d9ee571 100 */
Wolfgang Betz 0:4fb29d9ee571 101
Wolfgang Betz 0:4fb29d9ee571 102 /**
Wolfgang Betz 0:4fb29d9ee571 103 * @}
Wolfgang Betz 0:4fb29d9ee571 104 */
Wolfgang Betz 0:4fb29d9ee571 105
Wolfgang Betz 0:4fb29d9ee571 106 /**
Wolfgang Betz 0:4fb29d9ee571 107 * @defgroup RADIO_SPI_Private_Functions RADIO_SPI Private Functions
Wolfgang Betz 0:4fb29d9ee571 108 * @{
Wolfgang Betz 0:4fb29d9ee571 109 */
Wolfgang Betz 0:4fb29d9ee571 110
Wolfgang Betz 0:4fb29d9ee571 111 /**
Wolfgang Betz 0:4fb29d9ee571 112 * @}
Wolfgang Betz 0:4fb29d9ee571 113 */
Wolfgang Betz 0:4fb29d9ee571 114
Wolfgang Betz 0:4fb29d9ee571 115 /**
Wolfgang Betz 0:4fb29d9ee571 116 * @brief Write single or multiple RF Transceivers register
Wolfgang Betz 0:4fb29d9ee571 117 * @param cRegAddress: base register's address to be write
Wolfgang Betz 0:4fb29d9ee571 118 * @param cNbBytes: number of registers and bytes to be write
Wolfgang Betz 0:4fb29d9ee571 119 * @param pcBuffer: pointer to the buffer of values have to be written into registers
Wolfgang Betz 0:4fb29d9ee571 120 * @retval StatusBytes
Wolfgang Betz 0:4fb29d9ee571 121 */
Wolfgang Betz 0:4fb29d9ee571 122 StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 123 {
Wolfgang Betz 0:4fb29d9ee571 124 return SimpleSpirit1::Instance().SdkEvalSpiWriteRegisters(cRegAddress, cNbBytes, pcBuffer);
Wolfgang Betz 0:4fb29d9ee571 125 }
Wolfgang Betz 0:4fb29d9ee571 126
Wolfgang Betz 0:4fb29d9ee571 127 StatusBytes SimpleSpirit1::SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 128 {
Wolfgang Betz 0:4fb29d9ee571 129 uint8_t aHeader[2] = {0};
Wolfgang Betz 0:4fb29d9ee571 130 uint16_t tmpstatus = 0x0000;
Wolfgang Betz 0:4fb29d9ee571 131 StatusBytes *pStatus=(StatusBytes *)&tmpstatus;
Wolfgang Betz 0:4fb29d9ee571 132
Wolfgang Betz 0:4fb29d9ee571 133 /* Built the aHeader bytes */
Wolfgang Betz 0:4fb29d9ee571 134 aHeader[0] = WRITE_HEADER;
Wolfgang Betz 0:4fb29d9ee571 135 aHeader[1] = cRegAddress;
Wolfgang Betz 0:4fb29d9ee571 136
Wolfgang Betz 0:4fb29d9ee571 137 /* Puts the SPI chip select low to start the transaction */
Wolfgang Betz 0:4fb29d9ee571 138 chip_sync_select();
Wolfgang Betz 0:4fb29d9ee571 139
Wolfgang Betz 0:4fb29d9ee571 140 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 141 tmpstatus = _spi.write(aHeader[0]);
Wolfgang Betz 0:4fb29d9ee571 142 tmpstatus = tmpstatus << 8;
Wolfgang Betz 0:4fb29d9ee571 143
Wolfgang Betz 0:4fb29d9ee571 144 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 145 tmpstatus |= _spi.write(aHeader[1]);
Wolfgang Betz 0:4fb29d9ee571 146
Wolfgang Betz 0:4fb29d9ee571 147 /* Writes the registers according to the number of bytes */
Wolfgang Betz 0:4fb29d9ee571 148 for (int index = 0; index < cNbBytes; index++)
Wolfgang Betz 0:4fb29d9ee571 149 {
Wolfgang Betz 0:4fb29d9ee571 150 _spi.write(pcBuffer[index]);
Wolfgang Betz 0:4fb29d9ee571 151 }
Wolfgang Betz 0:4fb29d9ee571 152
Wolfgang Betz 0:4fb29d9ee571 153 /* Puts the SPI chip select high to end the transaction */
Wolfgang Betz 0:4fb29d9ee571 154 chip_sync_unselect();
Wolfgang Betz 0:4fb29d9ee571 155
Wolfgang Betz 0:4fb29d9ee571 156 return *pStatus;
Wolfgang Betz 0:4fb29d9ee571 157 }
Wolfgang Betz 0:4fb29d9ee571 158
Wolfgang Betz 0:4fb29d9ee571 159
Wolfgang Betz 0:4fb29d9ee571 160 /**
Wolfgang Betz 0:4fb29d9ee571 161 * @brief Read single or multiple SPIRIT1 register
Wolfgang Betz 0:4fb29d9ee571 162 * @param cRegAddress: base register's address to be read
Wolfgang Betz 0:4fb29d9ee571 163 * @param cNbBytes: number of registers and bytes to be read
Wolfgang Betz 0:4fb29d9ee571 164 * @param pcBuffer: pointer to the buffer of registers' values read
Wolfgang Betz 0:4fb29d9ee571 165 * @retval StatusBytes
Wolfgang Betz 0:4fb29d9ee571 166 */
Wolfgang Betz 0:4fb29d9ee571 167 StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 168 {
Wolfgang Betz 0:4fb29d9ee571 169 return SimpleSpirit1::Instance().SdkEvalSpiReadRegisters(cRegAddress, cNbBytes, pcBuffer);
Wolfgang Betz 0:4fb29d9ee571 170 }
Wolfgang Betz 0:4fb29d9ee571 171
Wolfgang Betz 0:4fb29d9ee571 172 StatusBytes SimpleSpirit1::SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 173 {
Wolfgang Betz 0:4fb29d9ee571 174 uint16_t tmpstatus = 0x00;
Wolfgang Betz 0:4fb29d9ee571 175 StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
Wolfgang Betz 0:4fb29d9ee571 176
Wolfgang Betz 0:4fb29d9ee571 177 uint8_t aHeader[2] = {0};
Wolfgang Betz 0:4fb29d9ee571 178
Wolfgang Betz 0:4fb29d9ee571 179 /* Built the aHeader bytes */
Wolfgang Betz 0:4fb29d9ee571 180 aHeader[0] = READ_HEADER;
Wolfgang Betz 0:4fb29d9ee571 181 aHeader[1] = cRegAddress;
Wolfgang Betz 0:4fb29d9ee571 182
Wolfgang Betz 0:4fb29d9ee571 183 /* Put the SPI chip select low to start the transaction */
Wolfgang Betz 0:4fb29d9ee571 184 chip_sync_select();
Wolfgang Betz 0:4fb29d9ee571 185
Wolfgang Betz 0:4fb29d9ee571 186 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 187 tmpstatus = _spi.write(aHeader[0]);
Wolfgang Betz 0:4fb29d9ee571 188 tmpstatus = tmpstatus << 8;
Wolfgang Betz 0:4fb29d9ee571 189
Wolfgang Betz 0:4fb29d9ee571 190 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 191 tmpstatus |= _spi.write(aHeader[1]);
Wolfgang Betz 0:4fb29d9ee571 192
Wolfgang Betz 0:4fb29d9ee571 193 for (int index = 0; index < cNbBytes; index++)
Wolfgang Betz 0:4fb29d9ee571 194 {
Wolfgang Betz 0:4fb29d9ee571 195 pcBuffer[index] = _spi.write(0xFF);
Wolfgang Betz 0:4fb29d9ee571 196 }
Wolfgang Betz 0:4fb29d9ee571 197
Wolfgang Betz 0:4fb29d9ee571 198 /* Put the SPI chip select high to end the transaction */
Wolfgang Betz 0:4fb29d9ee571 199 chip_sync_unselect();
Wolfgang Betz 0:4fb29d9ee571 200
Wolfgang Betz 0:4fb29d9ee571 201 return *pStatus;
Wolfgang Betz 0:4fb29d9ee571 202 }
Wolfgang Betz 0:4fb29d9ee571 203
Wolfgang Betz 0:4fb29d9ee571 204
Wolfgang Betz 0:4fb29d9ee571 205 /**
Wolfgang Betz 0:4fb29d9ee571 206 * @brief Send a command
Wolfgang Betz 0:4fb29d9ee571 207 * @param cCommandCode: command code to be sent
Wolfgang Betz 0:4fb29d9ee571 208 * @retval StatusBytes
Wolfgang Betz 0:4fb29d9ee571 209 */
Wolfgang Betz 0:4fb29d9ee571 210 StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode)
Wolfgang Betz 0:4fb29d9ee571 211 {
Wolfgang Betz 0:4fb29d9ee571 212 return SimpleSpirit1::Instance().SdkEvalSpiCommandStrobes(cCommandCode);
Wolfgang Betz 0:4fb29d9ee571 213 }
Wolfgang Betz 0:4fb29d9ee571 214
Wolfgang Betz 0:4fb29d9ee571 215 StatusBytes SimpleSpirit1::SdkEvalSpiCommandStrobes(uint8_t cCommandCode)
Wolfgang Betz 0:4fb29d9ee571 216 {
Wolfgang Betz 0:4fb29d9ee571 217 uint8_t aHeader[2] = {0};
Wolfgang Betz 0:4fb29d9ee571 218 uint16_t tmpstatus = 0x0000;
Wolfgang Betz 0:4fb29d9ee571 219
Wolfgang Betz 0:4fb29d9ee571 220 StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
Wolfgang Betz 0:4fb29d9ee571 221
Wolfgang Betz 0:4fb29d9ee571 222 /* Built the aHeader bytes */
Wolfgang Betz 0:4fb29d9ee571 223 aHeader[0] = COMMAND_HEADER;
Wolfgang Betz 0:4fb29d9ee571 224 aHeader[1] = cCommandCode;
Wolfgang Betz 0:4fb29d9ee571 225
Wolfgang Betz 0:4fb29d9ee571 226 /* Puts the SPI chip select low to start the transaction */
Wolfgang Betz 0:4fb29d9ee571 227 chip_sync_select();
Wolfgang Betz 0:4fb29d9ee571 228
Wolfgang Betz 0:4fb29d9ee571 229 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 230 tmpstatus = _spi.write(aHeader[0]);
Wolfgang Betz 0:4fb29d9ee571 231 tmpstatus = tmpstatus<<8;
Wolfgang Betz 0:4fb29d9ee571 232
Wolfgang Betz 0:4fb29d9ee571 233 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 234 tmpstatus |= _spi.write(aHeader[1]);
Wolfgang Betz 0:4fb29d9ee571 235
Wolfgang Betz 0:4fb29d9ee571 236 /* Puts the SPI chip select high to end the transaction */
Wolfgang Betz 0:4fb29d9ee571 237 chip_sync_unselect();
Wolfgang Betz 0:4fb29d9ee571 238
Wolfgang Betz 0:4fb29d9ee571 239 return *pStatus;
Wolfgang Betz 0:4fb29d9ee571 240
Wolfgang Betz 0:4fb29d9ee571 241 }
Wolfgang Betz 0:4fb29d9ee571 242
Wolfgang Betz 0:4fb29d9ee571 243
Wolfgang Betz 0:4fb29d9ee571 244 /**
Wolfgang Betz 0:4fb29d9ee571 245 * @brief Write data into TX FIFO
Wolfgang Betz 0:4fb29d9ee571 246 * @param cNbBytes: number of bytes to be written into TX FIFO
Wolfgang Betz 0:4fb29d9ee571 247 * @param pcBuffer: pointer to data to write
Wolfgang Betz 0:4fb29d9ee571 248 * @retval StatusBytes
Wolfgang Betz 0:4fb29d9ee571 249 */
Wolfgang Betz 0:4fb29d9ee571 250 StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 251 {
Wolfgang Betz 0:4fb29d9ee571 252 return SimpleSpirit1::Instance().SdkEvalSpiWriteFifo(cNbBytes, pcBuffer);
Wolfgang Betz 0:4fb29d9ee571 253 }
Wolfgang Betz 0:4fb29d9ee571 254
Wolfgang Betz 0:4fb29d9ee571 255 StatusBytes SimpleSpirit1::SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 256 {
Wolfgang Betz 0:4fb29d9ee571 257 uint16_t tmpstatus = 0x0000;
Wolfgang Betz 0:4fb29d9ee571 258 StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
Wolfgang Betz 0:4fb29d9ee571 259
Wolfgang Betz 0:4fb29d9ee571 260 uint8_t aHeader[2] = {0};
Wolfgang Betz 0:4fb29d9ee571 261
Wolfgang Betz 0:4fb29d9ee571 262 /* Built the aHeader bytes */
Wolfgang Betz 0:4fb29d9ee571 263 aHeader[0] = WRITE_HEADER;
Wolfgang Betz 0:4fb29d9ee571 264 aHeader[1] = LINEAR_FIFO_ADDRESS;
Wolfgang Betz 0:4fb29d9ee571 265
Wolfgang Betz 0:4fb29d9ee571 266 /* Put the SPI chip select low to start the transaction */
Wolfgang Betz 0:4fb29d9ee571 267 chip_sync_select();
Wolfgang Betz 0:4fb29d9ee571 268
Wolfgang Betz 0:4fb29d9ee571 269 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 270 tmpstatus = _spi.write(aHeader[0]);
Wolfgang Betz 0:4fb29d9ee571 271 tmpstatus = tmpstatus<<8;
Wolfgang Betz 0:4fb29d9ee571 272
Wolfgang Betz 0:4fb29d9ee571 273 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 274 tmpstatus |= _spi.write(aHeader[1]);
Wolfgang Betz 0:4fb29d9ee571 275
Wolfgang Betz 0:4fb29d9ee571 276 /* Writes the registers according to the number of bytes */
Wolfgang Betz 0:4fb29d9ee571 277 for (int index = 0; index < cNbBytes; index++)
Wolfgang Betz 0:4fb29d9ee571 278 {
Wolfgang Betz 0:4fb29d9ee571 279 _spi.write(pcBuffer[index]);
Wolfgang Betz 0:4fb29d9ee571 280 }
Wolfgang Betz 0:4fb29d9ee571 281
Wolfgang Betz 0:4fb29d9ee571 282 /* Put the SPI chip select high to end the transaction */
Wolfgang Betz 0:4fb29d9ee571 283 chip_sync_unselect();
Wolfgang Betz 0:4fb29d9ee571 284
Wolfgang Betz 0:4fb29d9ee571 285 return *pStatus;
Wolfgang Betz 0:4fb29d9ee571 286 }
Wolfgang Betz 0:4fb29d9ee571 287
Wolfgang Betz 0:4fb29d9ee571 288 /**
Wolfgang Betz 0:4fb29d9ee571 289 * @brief Read data from RX FIFO
Wolfgang Betz 0:4fb29d9ee571 290 * @param cNbBytes: number of bytes to read from RX FIFO
Wolfgang Betz 0:4fb29d9ee571 291 * @param pcBuffer: pointer to data read from RX FIFO
Wolfgang Betz 0:4fb29d9ee571 292 * @retval StatusBytes
Wolfgang Betz 0:4fb29d9ee571 293 */
Wolfgang Betz 0:4fb29d9ee571 294 StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 295 {
Wolfgang Betz 0:4fb29d9ee571 296 return SimpleSpirit1::Instance().SdkEvalSpiReadFifo(cNbBytes, pcBuffer);
Wolfgang Betz 0:4fb29d9ee571 297 }
Wolfgang Betz 0:4fb29d9ee571 298
Wolfgang Betz 0:4fb29d9ee571 299 StatusBytes SimpleSpirit1::SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
Wolfgang Betz 0:4fb29d9ee571 300 {
Wolfgang Betz 0:4fb29d9ee571 301 uint16_t tmpstatus = 0x0000;
Wolfgang Betz 0:4fb29d9ee571 302 StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
Wolfgang Betz 0:4fb29d9ee571 303
Wolfgang Betz 0:4fb29d9ee571 304 uint8_t aHeader[2];
Wolfgang Betz 0:4fb29d9ee571 305
Wolfgang Betz 0:4fb29d9ee571 306 /* Built the aHeader bytes */
Wolfgang Betz 0:4fb29d9ee571 307 aHeader[0]=READ_HEADER;
Wolfgang Betz 0:4fb29d9ee571 308 aHeader[1]=LINEAR_FIFO_ADDRESS;
Wolfgang Betz 0:4fb29d9ee571 309
Wolfgang Betz 0:4fb29d9ee571 310 /* Put the SPI chip select low to start the transaction */
Wolfgang Betz 0:4fb29d9ee571 311 chip_sync_select();
Wolfgang Betz 0:4fb29d9ee571 312
Wolfgang Betz 0:4fb29d9ee571 313 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 314 tmpstatus = _spi.write(aHeader[0]);
Wolfgang Betz 0:4fb29d9ee571 315 tmpstatus = tmpstatus<<8;
Wolfgang Betz 0:4fb29d9ee571 316
Wolfgang Betz 0:4fb29d9ee571 317 /* Write the aHeader bytes and read the SPIRIT1 status bytes */
Wolfgang Betz 0:4fb29d9ee571 318 tmpstatus |= _spi.write(aHeader[1]);
Wolfgang Betz 0:4fb29d9ee571 319
Wolfgang Betz 0:4fb29d9ee571 320 for (int index = 0; index < cNbBytes; index++)
Wolfgang Betz 0:4fb29d9ee571 321 {
Wolfgang Betz 0:4fb29d9ee571 322 pcBuffer[index] = _spi.write(0xFF);
Wolfgang Betz 0:4fb29d9ee571 323 }
Wolfgang Betz 0:4fb29d9ee571 324
Wolfgang Betz 0:4fb29d9ee571 325 /* Put the SPI chip select high to end the transaction */
Wolfgang Betz 0:4fb29d9ee571 326 chip_sync_unselect();
Wolfgang Betz 0:4fb29d9ee571 327
Wolfgang Betz 0:4fb29d9ee571 328 return *pStatus;
Wolfgang Betz 0:4fb29d9ee571 329 }
Wolfgang Betz 0:4fb29d9ee571 330
Wolfgang Betz 0:4fb29d9ee571 331
Wolfgang Betz 0:4fb29d9ee571 332 /**
Wolfgang Betz 0:4fb29d9ee571 333 * @}
Wolfgang Betz 0:4fb29d9ee571 334 */
Wolfgang Betz 0:4fb29d9ee571 335
Wolfgang Betz 0:4fb29d9ee571 336 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/