Browse Source

Add pinouts for v1.1 PCB

Petteri Aimonen 3 years ago
parent
commit
d85e39cdef

+ 15 - 3
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.cpp

@@ -1,5 +1,6 @@
 #include "AzulSCSI_platform.h"
 #include "gd32f20x_spi.h"
+#include "gd32f20x_sdio.h"
 #include "gd32f20x_dma.h"
 #include "AzulSCSI_log.h"
 #include "AzulSCSI_config.h"
@@ -7,7 +8,7 @@
 
 extern "C" {
 
-const char *g_azplatform_name = "GD32F205 AzulSCSI v1.x";
+const char *g_azplatform_name = PLATFORM_NAME;
 
 static volatile uint32_t g_millisecond_counter;
 static volatile uint32_t g_watchdog_timeout;
@@ -115,8 +116,15 @@ void azplatform_init()
 
     // SCSI pins.
     // Initialize open drain outputs to high.
-    gpio_bit_set(SCSI_OUT_PORT, SCSI_OUT_MASK);
-    gpio_init(SCSI_OUT_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_MASK);
+    SCSI_RELEASE_OUTPUTS();
+    gpio_init(SCSI_OUT_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_DATA_MASK | SCSI_OUT_REQ);
+    gpio_init(SCSI_OUT_IO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_IO_PIN);
+    gpio_init(SCSI_OUT_CD_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_CD_PIN);
+    gpio_init(SCSI_OUT_SEL_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_SEL_PIN);
+    gpio_init(SCSI_OUT_MSG_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_MSG_PIN);
+    gpio_init(SCSI_OUT_RST_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_RST_PIN);
+    gpio_init(SCSI_OUT_BSY_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SCSI_OUT_BSY_PIN);
+
     gpio_init(SCSI_IN_PORT, GPIO_MODE_IN_FLOATING, 0, SCSI_IN_MASK);
     gpio_init(SCSI_ATN_PORT, GPIO_MODE_IN_FLOATING, 0, SCSI_ATN_PIN);
     gpio_init(SCSI_BSY_PORT, GPIO_MODE_IN_FLOATING, 0, SCSI_BSY_PIN);
@@ -128,11 +136,15 @@ void azplatform_init()
     gpio_bit_set(SCSI_TERM_EN_PORT, SCSI_TERM_EN_PIN);
     gpio_init(SCSI_TERM_EN_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, SCSI_TERM_EN_PIN);
 
+#ifndef SD_USE_SDIO
     // SD card pins
     gpio_init(SD_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SD_CS_PIN);
     gpio_init(SD_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, SD_CLK_PIN);
     gpio_init(SD_PORT, GPIO_MODE_IPU, 0, SD_MISO_PIN);
     gpio_init(SD_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, SD_MOSI_PIN);
+#else
+#error SDIO support not added yet
+#endif
 
     // DIP switches
     gpio_init(DIP_PORT, GPIO_MODE_IPD, 0, DIPSW1_PIN | DIPSW2_PIN | DIPSW3_PIN);

+ 14 - 93
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.h

@@ -18,99 +18,14 @@ extern "C" {
 
 extern const char *g_azplatform_name;
 
-// GPIO definitions
-
-// SCSI output port.
-// This is written using BSRR mechanism, so all output pins must be on same GPIO port.
-// The output pins are open-drain in hardware, using separate buffer chips for driving.
-#define SCSI_OUT_PORT GPIOD
-#define SCSI_OUT_DB7  GPIO_PIN_0
-#define SCSI_OUT_DB6  GPIO_PIN_1
-#define SCSI_OUT_DB5  GPIO_PIN_2
-#define SCSI_OUT_DB4  GPIO_PIN_3
-#define SCSI_OUT_DB3  GPIO_PIN_4
-#define SCSI_OUT_DB2  GPIO_PIN_5
-#define SCSI_OUT_DB1  GPIO_PIN_6
-#define SCSI_OUT_DB0  GPIO_PIN_7
-#define SCSI_OUT_IO   GPIO_PIN_8
-#define SCSI_OUT_REQ  GPIO_PIN_9
-#define SCSI_OUT_CD   GPIO_PIN_10
-#define SCSI_OUT_SEL  GPIO_PIN_11
-#define SCSI_OUT_MSG  GPIO_PIN_12
-#define SCSI_OUT_RST  GPIO_PIN_13
-#define SCSI_OUT_BSY  GPIO_PIN_14
-#define SCSI_OUT_DBP  GPIO_PIN_15
-#define SCSI_OUT_DATA_MASK (0x00FF | SCSI_OUT_DBP)
-#define SCSI_OUT_MASK 0xFFFF
-
-// SCSI input port
-#define SCSI_IN_PORT  GPIOE
-#define SCSI_IN_DB7   GPIO_PIN_15
-#define SCSI_IN_DB6   GPIO_PIN_14
-#define SCSI_IN_DB5   GPIO_PIN_13
-#define SCSI_IN_DB4   GPIO_PIN_12
-#define SCSI_IN_DB3   GPIO_PIN_11
-#define SCSI_IN_DB2   GPIO_PIN_10
-#define SCSI_IN_DB1   GPIO_PIN_9
-#define SCSI_IN_DB0   GPIO_PIN_8
-#define SCSI_IN_DBP   GPIO_PIN_7
-#define SCSI_IN_MASK  (SCSI_IN_DB7|SCSI_IN_DB6|SCSI_IN_DB5|SCSI_IN_DB4|SCSI_IN_DB3|SCSI_IN_DB2|SCSI_IN_DB1|SCSI_IN_DB0|SCSI_IN_DBP)
-#define SCSI_IN_SHIFT 8
-
-// The SCSI_ATN pin was PB0 in prototype 2022a, but was moved to PC6 for 5V-tolerance
-#ifdef AZULSCSI_2022A_REVISION
-#define SCSI_ATN_PORT GPIOB
-#define SCSI_ATN_PIN  GPIO_PIN_0
-#else
-#define SCSI_ATN_PORT GPIOC
-#define SCSI_ATN_PIN  GPIO_PIN_6
+#if defined(AZULSCSI_V1_0)
+#   define PLATFORM_NAME "AzulSCSI v1.0"
+#   include "AzulSCSI_v1_0_gpio.h"
+#elif defined(AZULSCSI_V1_1)
+#   define PLATFORM_NAME "AzulSCSI v1.1"
+#   include "AzulSCSI_v1_1_gpio.h"
 #endif
 
-// Various SCSI status signals
-#define SCSI_BSY_PORT GPIOB
-#define SCSI_BSY_PIN  GPIO_PIN_10
-#define SCSI_SEL_PORT GPIOB
-#define SCSI_SEL_PIN  GPIO_PIN_11
-#define SCSI_ACK_PORT GPIOB
-#define SCSI_ACK_PIN  GPIO_PIN_12
-
-// RST pin uses EXTI interrupt
-#define SCSI_RST_PORT GPIOB
-#define SCSI_RST_PIN  GPIO_PIN_13
-#define SCSI_RST_EXTI EXTI_13
-#define SCSI_RST_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB
-#define SCSI_RST_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_13
-#define SCSI_RST_IRQ  EXTI10_15_IRQHandler
-#define SCSI_RST_IRQn EXTI10_15_IRQn
-
-// Terminator enable/disable config, active low
-#define SCSI_TERM_EN_PORT GPIOC
-#define SCSI_TERM_EN_PIN  GPIO_PIN_8
-
-// SD card pins
-#define SD_PORT      GPIOA
-#define SD_CS_PIN    GPIO_PIN_4
-#define SD_CLK_PIN   GPIO_PIN_5
-#define SD_MISO_PIN  GPIO_PIN_6
-#define SD_MOSI_PIN  GPIO_PIN_7
-#define SD_SPI       SPI0
-#define SD_SPI_RX_DMA_CHANNEL DMA_CH1
-#define SD_SPI_TX_DMA_CHANNEL DMA_CH2
-
-// DIP switches
-#define DIP_PORT     GPIOB
-#define DIPSW1_PIN   GPIO_PIN_4
-#define DIPSW2_PIN   GPIO_PIN_5
-#define DIPSW3_PIN   GPIO_PIN_6
-
-// Status LED pins
-#define LED_PORT     GPIOC
-#define LED_I_PIN    GPIO_PIN_4
-#define LED_E_PIN    GPIO_PIN_5
-#define LED_PINS     (LED_I_PIN | LED_E_PIN)
-#define LED_ON()     gpio_bit_reset(LED_PORT, LED_PINS)
-#define LED_OFF()    gpio_bit_set(LED_PORT, LED_PINS)
-
 // Debug logging functions
 void azplatform_log(const char *s);
 
@@ -162,7 +77,7 @@ size_t azplatform_finish_stream();
 // Write a single SCSI pin.
 // Example use: SCSI_OUT(ATN, 1) sets SCSI_ATN to low (active) state.
 #define SCSI_OUT(pin, state) \
-    GPIO_BOP(SCSI_OUT_PORT) = (SCSI_OUT_ ## pin) << (state ? 16 : 0)
+    GPIO_BOP(SCSI_OUT_ ## pin ## _PORT) = (SCSI_OUT_ ## pin ## _PIN) << (state ? 16 : 0)
 
 // Read a single SCSI pin.
 // Example use: SCSI_IN(ATN), returns 1 for active low state.
@@ -180,7 +95,13 @@ extern const uint32_t g_scsi_out_byte_to_bop[256];
 
 // Release all SCSI outputs
 #define SCSI_RELEASE_OUTPUTS() \
-    GPIO_BOP(SCSI_OUT_PORT) = SCSI_OUT_MASK
+    GPIO_BOP(SCSI_OUT_PORT) = SCSI_OUT_DATA_MASK | SCSI_OUT_REQ, \
+    GPIO_BOP(SCSI_OUT_IO_PORT)  = SCSI_OUT_IO_PIN, \
+    GPIO_BOP(SCSI_OUT_CD_PORT)  = SCSI_OUT_CD_PIN, \
+    GPIO_BOP(SCSI_OUT_SEL_PORT) = SCSI_OUT_SEL_PIN, \
+    GPIO_BOP(SCSI_OUT_MSG_PORT) = SCSI_OUT_MSG_PIN, \
+    GPIO_BOP(SCSI_OUT_RST_PORT) = SCSI_OUT_RST_PIN, \
+    GPIO_BOP(SCSI_OUT_BSY_PORT) = SCSI_OUT_BSY_PIN
 
 // Read SCSI data bus
 #define SCSI_IN_DATA(data) \

+ 103 - 0
lib/AzulSCSI_platform_GD32F205/AzulSCSI_v1_0_gpio.h

@@ -0,0 +1,103 @@
+// GPIO definitions for AzulSCSI v1.0
+
+#pragma once
+
+// SCSI data output port.
+// The output data is written using BSRR mechanism, so all data pins must be on same GPIO port.
+// The output pins are open-drain in hardware, using separate buffer chips for driving.
+#define SCSI_OUT_PORT GPIOD
+#define SCSI_OUT_DB7  GPIO_PIN_0
+#define SCSI_OUT_DB6  GPIO_PIN_1
+#define SCSI_OUT_DB5  GPIO_PIN_2
+#define SCSI_OUT_DB4  GPIO_PIN_3
+#define SCSI_OUT_DB3  GPIO_PIN_4
+#define SCSI_OUT_DB2  GPIO_PIN_5
+#define SCSI_OUT_DB1  GPIO_PIN_6
+#define SCSI_OUT_DB0  GPIO_PIN_7
+#define SCSI_OUT_DBP  GPIO_PIN_15
+#define SCSI_OUT_REQ  GPIO_PIN_9
+#define SCSI_OUT_DATA_MASK (SCSI_OUT_DB0 | SCSI_OUT_DB1 | SCSI_OUT_DB2 | SCSI_OUT_DB3 | SCSI_OUT_DB4 | SCSI_OUT_DB5 | SCSI_OUT_DB6 | SCSI_OUT_DB7 | SCSI_OUT_DBP)
+
+// SCSI input data port
+#define SCSI_IN_PORT  GPIOE
+#define SCSI_IN_DB7   GPIO_PIN_15
+#define SCSI_IN_DB6   GPIO_PIN_14
+#define SCSI_IN_DB5   GPIO_PIN_13
+#define SCSI_IN_DB4   GPIO_PIN_12
+#define SCSI_IN_DB3   GPIO_PIN_11
+#define SCSI_IN_DB2   GPIO_PIN_10
+#define SCSI_IN_DB1   GPIO_PIN_9
+#define SCSI_IN_DB0   GPIO_PIN_8
+#define SCSI_IN_DBP   GPIO_PIN_7
+#define SCSI_IN_MASK  (SCSI_IN_DB7|SCSI_IN_DB6|SCSI_IN_DB5|SCSI_IN_DB4|SCSI_IN_DB3|SCSI_IN_DB2|SCSI_IN_DB1|SCSI_IN_DB0|SCSI_IN_DBP)
+#define SCSI_IN_SHIFT 8
+
+// SCSI output status lines
+#define SCSI_OUT_IO_PORT  GPIOD
+#define SCSI_OUT_IO_PIN   GPIO_PIN_8
+#define SCSI_OUT_CD_PORT  GPIOD
+#define SCSI_OUT_CD_PIN   GPIO_PIN_10
+#define SCSI_OUT_SEL_PORT GPIOD
+#define SCSI_OUT_SEL_PIN  GPIO_PIN_11
+#define SCSI_OUT_MSG_PORT GPIOD
+#define SCSI_OUT_MSG_PIN  GPIO_PIN_12
+#define SCSI_OUT_RST_PORT GPIOD
+#define SCSI_OUT_RST_PIN  GPIO_PIN_13
+#define SCSI_OUT_BSY_PORT GPIOD
+#define SCSI_OUT_BSY_PIN  GPIO_PIN_14
+#define SCSI_OUT_REQ_PORT SCSI_OUT_PORT
+#define SCSI_OUT_REQ_PIN  SCSI_OUT_REQ
+
+// SCSI input status signals
+#define SCSI_BSY_PORT GPIOB
+#define SCSI_BSY_PIN  GPIO_PIN_10
+#define SCSI_SEL_PORT GPIOB
+#define SCSI_SEL_PIN  GPIO_PIN_11
+#define SCSI_ACK_PORT GPIOB
+#define SCSI_ACK_PIN  GPIO_PIN_12
+
+// The SCSI_ATN pin was PB0 in prototype 2022a, but was moved to PC6 for 5V-tolerance
+#ifdef AZULSCSI_2022A_REVISION
+#define SCSI_ATN_PORT GPIOB
+#define SCSI_ATN_PIN  GPIO_PIN_0
+#else
+#define SCSI_ATN_PORT GPIOC
+#define SCSI_ATN_PIN  GPIO_PIN_6
+#endif
+
+// RST pin uses EXTI interrupt
+#define SCSI_RST_PORT GPIOB
+#define SCSI_RST_PIN  GPIO_PIN_13
+#define SCSI_RST_EXTI EXTI_13
+#define SCSI_RST_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB
+#define SCSI_RST_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_13
+#define SCSI_RST_IRQ  EXTI10_15_IRQHandler
+#define SCSI_RST_IRQn EXTI10_15_IRQn
+
+// Terminator enable/disable config, active low
+#define SCSI_TERM_EN_PORT GPIOC
+#define SCSI_TERM_EN_PIN  GPIO_PIN_8
+
+// SD card pins
+#define SD_PORT      GPIOA
+#define SD_CS_PIN    GPIO_PIN_4
+#define SD_CLK_PIN   GPIO_PIN_5
+#define SD_MISO_PIN  GPIO_PIN_6
+#define SD_MOSI_PIN  GPIO_PIN_7
+#define SD_SPI       SPI0
+#define SD_SPI_RX_DMA_CHANNEL DMA_CH1
+#define SD_SPI_TX_DMA_CHANNEL DMA_CH2
+
+// DIP switches
+#define DIP_PORT     GPIOB
+#define DIPSW1_PIN   GPIO_PIN_4
+#define DIPSW2_PIN   GPIO_PIN_5
+#define DIPSW3_PIN   GPIO_PIN_6
+
+// Status LED pins
+#define LED_PORT     GPIOC
+#define LED_I_PIN    GPIO_PIN_4
+#define LED_E_PIN    GPIO_PIN_5
+#define LED_PINS     (LED_I_PIN | LED_E_PIN)
+#define LED_ON()     gpio_bit_reset(LED_PORT, LED_PINS)
+#define LED_OFF()    gpio_bit_set(LED_PORT, LED_PINS)

+ 95 - 0
lib/AzulSCSI_platform_GD32F205/AzulSCSI_v1_1_gpio.h

@@ -0,0 +1,95 @@
+// GPIO definitions for AzulSCSI v1.1
+
+#pragma once
+
+// SCSI data output port.
+// The output data is written using BSRR mechanism, so all data pins must be on same GPIO port.
+// The output pins are open-drain in hardware, using separate buffer chips for driving.
+#define SCSI_OUT_PORT GPIOD
+#define SCSI_OUT_DB7  GPIO_PIN_9
+#define SCSI_OUT_DB6  GPIO_PIN_10
+#define SCSI_OUT_DB5  GPIO_PIN_11
+#define SCSI_OUT_DB4  GPIO_PIN_12
+#define SCSI_OUT_DB3  GPIO_PIN_13
+#define SCSI_OUT_DB2  GPIO_PIN_14
+#define SCSI_OUT_DB1  GPIO_PIN_0
+#define SCSI_OUT_DB0  GPIO_PIN_1
+#define SCSI_OUT_DBP  GPIO_PIN_8
+#define SCSI_OUT_REQ  GPIO_PIN_4
+#define SCSI_OUT_DATA_MASK (SCSI_OUT_DB0 | SCSI_OUT_DB1 | SCSI_OUT_DB2 | SCSI_OUT_DB3 | SCSI_OUT_DB4 | SCSI_OUT_DB5 | SCSI_OUT_DB6 | SCSI_OUT_DB7 | SCSI_OUT_DBP)
+
+// Control signals to optional PLD device
+#define SCSI_OUT_PLD1 GPIO_PIN_15
+#define SCSI_OUT_PLD2 GPIO_PIN_3
+#define SCSI_OUT_PLD3 GPIO_PIN_5
+#define SCSI_OUT_PLD4 GPIO_PIN_7
+
+// SCSI input data port
+#define SCSI_IN_PORT  GPIOE
+#define SCSI_IN_DB7   GPIO_PIN_15
+#define SCSI_IN_DB6   GPIO_PIN_14
+#define SCSI_IN_DB5   GPIO_PIN_13
+#define SCSI_IN_DB4   GPIO_PIN_12
+#define SCSI_IN_DB3   GPIO_PIN_11
+#define SCSI_IN_DB2   GPIO_PIN_10
+#define SCSI_IN_DB1   GPIO_PIN_9
+#define SCSI_IN_DB0   GPIO_PIN_8
+#define SCSI_IN_DBP   GPIO_PIN_7
+#define SCSI_IN_MASK  (SCSI_IN_DB7|SCSI_IN_DB6|SCSI_IN_DB5|SCSI_IN_DB4|SCSI_IN_DB3|SCSI_IN_DB2|SCSI_IN_DB1|SCSI_IN_DB0|SCSI_IN_DBP)
+#define SCSI_IN_SHIFT 8
+
+// SCSI output status lines
+#define SCSI_OUT_IO_PORT  GPIOA
+#define SCSI_OUT_IO_PIN   GPIO_PIN_4
+#define SCSI_OUT_CD_PORT  GPIOA
+#define SCSI_OUT_CD_PIN   GPIO_PIN_5
+#define SCSI_OUT_SEL_PORT GPIOA
+#define SCSI_OUT_SEL_PIN  GPIO_PIN_6
+#define SCSI_OUT_MSG_PORT GPIOA
+#define SCSI_OUT_MSG_PIN  GPIO_PIN_7
+#define SCSI_OUT_RST_PORT GPIOB
+#define SCSI_OUT_RST_PIN  GPIO_PIN_14
+#define SCSI_OUT_BSY_PORT GPIOB
+#define SCSI_OUT_BSY_PIN  GPIO_PIN_15
+#define SCSI_OUT_REQ_PORT SCSI_OUT_PORT
+#define SCSI_OUT_REQ_PIN  SCSI_OUT_REQ
+
+// SCSI input status signals
+#define SCSI_BSY_PORT GPIOB
+#define SCSI_BSY_PIN  GPIO_PIN_10
+#define SCSI_SEL_PORT GPIOB
+#define SCSI_SEL_PIN  GPIO_PIN_11
+#define SCSI_ACK_PORT GPIOA
+#define SCSI_ACK_PIN  GPIO_PIN_0
+#define SCSI_ATN_PORT GPIOB
+#define SCSI_ATN_PIN  GPIO_PIN_12
+
+// RST pin uses EXTI interrupt
+#define SCSI_RST_PORT GPIOB
+#define SCSI_RST_PIN  GPIO_PIN_13
+#define SCSI_RST_EXTI EXTI_13
+#define SCSI_RST_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB
+#define SCSI_RST_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_13
+#define SCSI_RST_IRQ  EXTI10_15_IRQHandler
+#define SCSI_RST_IRQn EXTI10_15_IRQn
+
+// Terminator enable/disable config, active low
+#define SCSI_TERM_EN_PORT GPIOB
+#define SCSI_TERM_EN_PIN  GPIO_PIN_0
+
+// SD card pins
+#define SD_USE_SDIO 1
+
+// DIP switches
+#define DIP_PORT     GPIOB
+#define DIPSW1_PIN   GPIO_PIN_4
+#define DIPSW2_PIN   GPIO_PIN_5
+#define DIPSW3_PIN   GPIO_PIN_6
+
+// Status LED pins
+#define LED_PORT     GPIOC
+#define LED_I_PIN    GPIO_PIN_4
+#define LED_E_PIN    GPIO_PIN_5
+#define LED_PINS     (LED_I_PIN | LED_E_PIN)
+#define LED_ON()     gpio_bit_reset(LED_PORT, LED_PINS)
+#define LED_OFF()    gpio_bit_set(LED_PORT, LED_PINS)

+ 1 - 0
platformio.ini

@@ -22,3 +22,4 @@ build_flags =
      -DSPI_DRIVER_SELECT=3
      -DSD_CHIP_SELECT_MODE=2
      -DENABLE_DEDICATED_SPI=1
+     -DAZULSCSI_V1_0