GWRAM.SYSTEM/ram2gs_hal_spi.c

39 lines
1.2 KiB
C

static void ram2gs_spi_select() { ram2gs_cmd(0x34); }
static void ram2gs_spi_deselect() { ram2gs_cmd(0x30); }
static void ram2gs_spi_tx8(char data) {
char i;
for (i = 0; i < 8; i++) {
ram2gs_cmd(0x34 + ((data >> (7-i)) & 1));
ram2gs_cmd(0x36 + ((data >> (7-i)) & 1));
}
}
static void ram2gs_spi_wren() {
ram2gs_spi_deselect();
ram2gs_spi_select();
ram2gs_spi_tx8(0x06); // 0x06 is write enable
ram2gs_spi_deselect();
}
static void ram2gs_spi_erase() {
ram2gs_spi_wren();
ram2gs_spi_select();
ram2gs_spi_tx8(0x20); // 0x20 is sector erase (4 kB)
ram2gs_spi_tx8(0x00); // address[23:16]
ram2gs_spi_tx8(0x10); // address[15:8]
ram2gs_spi_tx8(0x00); // address[7:0]
ram2gs_spi_deselect();
}
static void ram2gs_spi_save(char en8meg, char enled) {
ram2gs_spi_wren();
ram2gs_spi_select();
ram2gs_spi_tx8(0x02); // 0x02 is page (byte) program
ram2gs_spi_tx8(0x00); // address[23:16]
ram2gs_spi_tx8(0x10); // address[15:8]
ram2gs_spi_tx8(0x00); // address[7:0]
// data[7:0]
if (!en8meg && !enled) { ram2gs_spi_tx8(0x7F); }
else if (!en8meg && enled) { ram2gs_spi_tx8(0x3F); }
else if ( en8meg && !enled) { ram2gs_spi_tx8(0xFF); }
else if ( en8meg && enled) { ram2gs_spi_tx8(0xBF); }
ram2gs_spi_deselect();
}