// ***************************************************************************** // SPI platform interface uint32_t platform_spi_setup( uint8_t id, int mode, unsigned cpol, unsigned cpha, uint32_t clock_div ) { spi_master_init( id, cpol, cpha, clock_div ); // all platform functions assume LSB order for MOSI & MISO buffer spi_mast_byte_order( id, SPI_ORDER_LSB ); return 1; }
int platform_spi_blkwrite( uint8_t id, size_t len, const uint8_t *data ) { spi_mast_byte_order( id, SPI_ORDER_LSB ); while (len > 0) { size_t chunk_len = len > 64 ? 64 : len; spi_mast_blkset( id, chunk_len * 8, data ); spi_mast_transaction( id, 0, 0, 0, 0, chunk_len * 8, 0, 0 ); data = &(data[chunk_len]); len -= chunk_len; } spi_mast_byte_order( id, SPI_ORDER_MSB ); return PLATFORM_OK; }
int platform_spi_blkread( uint8_t id, size_t len, uint8_t *data ) { uint8_t mosi_idle[64]; os_memset( (void *)mosi_idle, 0xff, len > 64 ? 64 : len ); spi_mast_byte_order( id, SPI_ORDER_LSB ); while (len > 0 ) { size_t chunk_len = len > 64 ? 64 : len; spi_mast_blkset( id, chunk_len * 8, mosi_idle ); spi_mast_transaction( id, 0, 0, 0, 0, chunk_len * 8, 0, -1 ); spi_mast_blkget( id, chunk_len * 8, data ); data = &(data[chunk_len]); len -= chunk_len; } spi_mast_byte_order( id, SPI_ORDER_MSB ); return PLATFORM_OK; }