|
|
|
//
|
|
|
|
// Created by MightyPork on 2018/01/02.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef GEX_F072_UNIT_SPI_H
|
|
|
|
#define GEX_F072_UNIT_SPI_H
|
|
|
|
|
|
|
|
#include "unit.h"
|
|
|
|
|
|
|
|
extern const UnitDriver UNIT_SPI;
|
|
|
|
|
|
|
|
// Unit-to-Unit API
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Raw read/write via SPI.
|
|
|
|
* It's possible to simultaneously write and read, or skip bytes in either direction.
|
|
|
|
*
|
|
|
|
* Example scenarios:
|
|
|
|
*
|
|
|
|
* req 2, skip 2, read 3
|
|
|
|
* |<-- req_len --->|
|
|
|
|
* [ write ][ write ] . . . . . . . .
|
|
|
|
* . . . . . . . . . [ read ][ read ][ read ]
|
|
|
|
* |<-- resp_skip ->|<------ resp_len ----->|
|
|
|
|
*
|
|
|
|
* req 2, skip 0, read 2
|
|
|
|
* |<-- req_len --->|
|
|
|
|
* [ write ][ write ]
|
|
|
|
* [ read ][ read ]
|
|
|
|
* |<-- resp_len -->|
|
|
|
|
*
|
|
|
|
* @param unit - SPI unit
|
|
|
|
* @param slave_num - slave number (SS pin index, counted from least significant bit)
|
|
|
|
* @param request - request bytes buffer
|
|
|
|
* @param response - response bytes buffer
|
|
|
|
* @param req_len - number of bytes in the request. Will be right-padded with zeros.
|
|
|
|
* @param resp_skip - response bytes to discard before starting to capture them
|
|
|
|
* @param resp_len - number of bytes to capture, after discarding resp_skip received bytes
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_SPI_Write(Unit *unit, uint8_t slave_num,
|
|
|
|
const uint8_t *request,
|
|
|
|
uint8_t *response,
|
|
|
|
uint32_t req_len,
|
|
|
|
uint32_t resp_skip,
|
|
|
|
uint32_t resp_len);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Write to multiple slaves at once.
|
|
|
|
* This is similar to UU_SPI_Write, but performs no read and works only if the device
|
|
|
|
* is configured as tx-only.
|
|
|
|
*
|
|
|
|
* @param unit - SPI unit
|
|
|
|
* @param slaves - bitmap of slaves to write (packed bits representing the SSN pins)
|
|
|
|
* @param request - request bytes buffer
|
|
|
|
* @param req_len - length of the request buffer
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_SPI_Multicast(Unit *unit, uint16_t slaves,
|
|
|
|
const uint8_t *request,
|
|
|
|
uint32_t req_len);
|
|
|
|
|
|
|
|
#endif //GEX_F072_UNIT_SPI_H
|