[flashrom] [PATCH] ch341a_spi: provide nACT/ACT with CS1/2 for ISP use

Urja Rannikko urjaman at gmail.com
Sat Feb 27 18:24:36 CET 2016


This allows to drive MCU RST lines or similar with the ch341a
during a flashrom run. CS1 is active low and CS2 is active high;
note that the tristate state is a weak pullup, thus using
CS2 would need an external pull-down.

Signed-off-by: Urja Rannikko <urjaman at gmail.com>
---
 ch341a_spi.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/ch341a_spi.c b/ch341a_spi.c
index 6eb2804..7e5d577 100644
--- a/ch341a_spi.c
+++ b/ch341a_spi.c
@@ -303,8 +303,12 @@ static uint8_t swap_byte(uint8_t x)
 static int32_t enable_pins(bool enable)
 {
 	uint8_t buf[] = {
+		/* We provide CS1 as "nACT" and CS2 as "ACT" during operation for ISP
+		 * designs to drive eg. reset lines, meaning CS1 is driven low during
+		 * flashrom run and CS2 high. Note that the tristate state is a weak
+		 * pullup, thus using CS2 needs an external pull-down. */
 		CH341A_CMD_UIO_STREAM,
-		CH341A_CMD_UIO_STM_OUT | 0x37, // CS high (all of them), SCK=0, DOUT*=1
+		CH341A_CMD_UIO_STM_OUT | (enable ? 0x35 : 0x33), // SCK=0, DOUT*=1
 		CH341A_CMD_UIO_STM_DIR | (enable ? 0x3F : 0x00), // Interface output enable / disable
 		CH341A_CMD_UIO_STM_END,
 	};
@@ -327,11 +331,11 @@ static void pluck_cs(uint8_t *ptr)
 		stored_delay_us = 0;
 	}
 	*ptr++ = CH341A_CMD_UIO_STREAM;
-	*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x37; /* deasserted */
+	*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x35; /* deasserted */
 	int i;
 	for (i = 0; i < delay_cnt; i++)
-		*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x37; /* "delay" */
-	*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x36; /* asserted */
+		*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x35; /* "delay" */
+	*ptr++ = CH341A_CMD_UIO_STM_OUT | 0x34; /* asserted */
 	*ptr++ = CH341A_CMD_UIO_STM_END;
 }
 
-- 
2.7.1





More information about the flashrom mailing list