mirror of https://github.com/YosysHQ/icestorm.git
Adjust SPI transfer parameter to bytes
This commit is contained in:
parent
1d5b1a3fcc
commit
1f4c319b3c
|
|
@ -173,16 +173,14 @@ static void set_spi_pins(
|
||||||
usb_write(FLASHER_REQUEST_SPI_PINS_SET, buf, sizeof(buf));
|
usb_write(FLASHER_REQUEST_SPI_PINS_SET, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define MAX_BYTES_PER_TRANSFER (256-7)
|
#define MAX_BYTES_PER_TRANSFER (2048-8)
|
||||||
#define MAX_BYTES_PER_TRANSFER (1024-8)
|
|
||||||
|
|
||||||
|
|
||||||
static void bitbang_spi_no_cs(
|
static void bitbang_spi_no_cs(
|
||||||
uint32_t bit_count,
|
uint32_t byte_count,
|
||||||
uint8_t* buf_out,
|
uint8_t* buf_out,
|
||||||
uint8_t* buf_in) {
|
uint8_t* buf_in) {
|
||||||
|
|
||||||
const uint32_t byte_count = ((bit_count + 7) / 8);
|
|
||||||
if(byte_count > MAX_BYTES_PER_TRANSFER) {
|
if(byte_count > MAX_BYTES_PER_TRANSFER) {
|
||||||
printf("bit count too high\n");
|
printf("bit count too high\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
@ -191,10 +189,10 @@ static void bitbang_spi_no_cs(
|
||||||
uint8_t buf[4+MAX_BYTES_PER_TRANSFER];
|
uint8_t buf[4+MAX_BYTES_PER_TRANSFER];
|
||||||
memset(buf, 0xFF, sizeof(buf));
|
memset(buf, 0xFF, sizeof(buf));
|
||||||
|
|
||||||
buf[0] = (bit_count >> 24) & 0xff;
|
buf[0] = (byte_count >> 24) & 0xff;
|
||||||
buf[1] = (bit_count >> 16) & 0xff;
|
buf[1] = (byte_count >> 16) & 0xff;
|
||||||
buf[2] = (bit_count >> 8) & 0xff;
|
buf[2] = (byte_count >> 8) & 0xff;
|
||||||
buf[3] = (bit_count >> 0) & 0xff;
|
buf[3] = (byte_count >> 0) & 0xff;
|
||||||
|
|
||||||
memcpy(&buf[4], buf_out, byte_count);
|
memcpy(&buf[4], buf_out, byte_count);
|
||||||
|
|
||||||
|
|
@ -215,7 +213,6 @@ static void bitbang_spi_no_cs(
|
||||||
|
|
||||||
// ********* iceprog API ****************
|
// ********* iceprog API ****************
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void close() {
|
static void close() {
|
||||||
// pin_set_direction(PIN_POWER, true);
|
// pin_set_direction(PIN_POWER, true);
|
||||||
pin_set_direction(PIN_SCK, false);
|
pin_set_direction(PIN_SCK, false);
|
||||||
|
|
@ -234,13 +231,11 @@ static void close() {
|
||||||
printf("Done\n read time:%f\n write time:%f\n read calls:%i\n write calls:%i\n", read_time, write_time, read_calls, write_calls);
|
printf("Done\n read time:%f\n write time:%f\n read calls:%i\n write calls:%i\n", read_time, write_time, read_calls, write_calls);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void error(int status) {
|
static void error(int status) {
|
||||||
close();
|
close();
|
||||||
exit(status);
|
exit(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void set_cs_creset(int cs_b, int creset_b) {
|
static void set_cs_creset(int cs_b, int creset_b) {
|
||||||
pinmask_write(
|
pinmask_write(
|
||||||
(1<<PIN_SS) | (1<PIN_CRESET),
|
(1<<PIN_SS) | (1<PIN_CRESET),
|
||||||
|
|
@ -248,30 +243,29 @@ static void set_cs_creset(int cs_b, int creset_b) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static bool get_cdone(void) {
|
static bool get_cdone(void) {
|
||||||
return pin_read(PIN_CDONE);
|
return pin_read(PIN_CDONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO: actually transfers a whole byte
|
||||||
static uint8_t xfer_spi_bits(uint8_t data, int n) {
|
static uint8_t xfer_spi_bits(uint8_t data, int n) {
|
||||||
uint8_t buf = data;
|
uint8_t buf = data;
|
||||||
bitbang_spi_no_cs(n, &buf, &buf);
|
|
||||||
|
const uint8_t bytes = ((n+7)/8);
|
||||||
|
|
||||||
|
bitbang_spi_no_cs(bytes, &buf, &buf);
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void xfer_spi(uint8_t *data, int n) {
|
static void xfer_spi(uint8_t *data, int n) {
|
||||||
bitbang_spi_no_cs(n*8, data, data);
|
bitbang_spi_no_cs(n, data, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void send_spi(uint8_t *data, int n) {
|
static void send_spi(uint8_t *data, int n) {
|
||||||
bitbang_spi_no_cs(n*8, data, NULL);
|
bitbang_spi_no_cs(n, data, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void send_dummy_bytes(uint8_t n) {
|
static void send_dummy_bytes(uint8_t n) {
|
||||||
uint8_t buf[n];
|
uint8_t buf[n];
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
|
|
@ -279,10 +273,9 @@ static void send_dummy_bytes(uint8_t n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
static void send_dummy_bit(void) {
|
static void send_dummy_bit(void) {
|
||||||
uint8_t buf = 0;
|
uint8_t buf = 0;
|
||||||
bitbang_spi_no_cs(1, &buf, NULL);
|
xfer_spi_bits(buf, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue