spi: actually transmit data
We were sending data on CS, not on CLK. Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
		
							
								
								
									
										28
									
								
								sw/src/spi.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								sw/src/spi.c
									
									
									
									
									
								
							@@ -154,6 +154,7 @@ static void spi_set_state(struct ff_spi *spi, enum spi_state state) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void spiPause(struct ff_spi *spi) {
 | 
					void spiPause(struct ff_spi *spi) {
 | 
				
			||||||
	(void)spi;
 | 
						(void)spi;
 | 
				
			||||||
 | 
						gpioSync();
 | 
				
			||||||
//	usleep(1);
 | 
					//	usleep(1);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -165,13 +166,11 @@ void spiBegin(struct ff_spi *spi) {
 | 
				
			|||||||
		gpioWrite(spi->pins.hold, 1);
 | 
							gpioWrite(spi->pins.hold, 1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	gpioWrite(spi->pins.cs, 0);
 | 
						gpioWrite(spi->pins.cs, 0);
 | 
				
			||||||
	gpioSync();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void spiEnd(struct ff_spi *spi) {
 | 
					void spiEnd(struct ff_spi *spi) {
 | 
				
			||||||
	(void)spi;
 | 
						(void)spi;
 | 
				
			||||||
	gpioWrite(spi->pins.cs, 1);
 | 
						gpioWrite(spi->pins.cs, 1);
 | 
				
			||||||
	gpioSync();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint8_t spiXfer(struct ff_spi *spi, uint8_t out) {
 | 
					static uint8_t spiXfer(struct ff_spi *spi, uint8_t out) {
 | 
				
			||||||
@@ -517,39 +516,31 @@ struct spi_id spiId(struct ff_spi *spi) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void spi_decode_id(struct ff_spi *spi) {
 | 
					static void spi_decode_id(struct ff_spi *spi) {
 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
	spi->id.manufacturer = "unknown";
 | 
					 | 
				
			||||||
	spi->id.model = "unknown";
 | 
					 | 
				
			||||||
	spi->id.capacity = "unknown";
 | 
					 | 
				
			||||||
	spi->id.bytes = -1; // unknown
 | 
						spi->id.bytes = -1; // unknown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (spi->id.manufacturer_id == 0xef) {
 | 
						if (spi->id.manufacturer_id == 0xef) {
 | 
				
			||||||
		spi->id.manufacturer = "Winbond";
 | 
							// spi->id.manufacturer = "Winbond";
 | 
				
			||||||
		if ((spi->id.memory_type == 0x70)
 | 
							if ((spi->id.memory_type == 0x70)
 | 
				
			||||||
		 && (spi->id.memory_size == 0x18)) {
 | 
							 && (spi->id.memory_size == 0x18)) {
 | 
				
			||||||
			spi->id.model = "W25Q128JV";
 | 
								// spi->id.model = "W25Q128JV";
 | 
				
			||||||
			spi->id.capacity = "128 Mbit";
 | 
								// spi->id.capacity = "128 Mbit";
 | 
				
			||||||
			spi->id.bytes = 16 * 1024 * 1024;
 | 
								spi->id.bytes = 16 * 1024 * 1024;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (spi->id.manufacturer_id == 0x1f) {
 | 
						if (spi->id.manufacturer_id == 0x1f) {
 | 
				
			||||||
		spi->id.manufacturer = "Adesto";
 | 
							// spi->id.manufacturer = "Adesto";
 | 
				
			||||||
		 if ((spi->id.memory_type == 0x86)
 | 
							 if ((spi->id.memory_type == 0x86)
 | 
				
			||||||
		  && (spi->id.memory_size == 0x01)) {
 | 
							  && (spi->id.memory_size == 0x01)) {
 | 
				
			||||||
			spi->id.model = "AT25SF161";
 | 
								// spi->id.model = "AT25SF161";
 | 
				
			||||||
			spi->id.capacity = "16 Mbit";
 | 
								// spi->id.capacity = "16 Mbit";
 | 
				
			||||||
			spi->id.bytes = 1 * 1024 * 1024;
 | 
								spi->id.bytes = 1 * 1024 * 1024;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void spi_get_id(struct ff_spi *spi) {
 | 
					static void spi_get_id(struct ff_spi *spi) {
 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
	// memset(&spi->id, 0xff, sizeof(spi->id));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	spiBegin(spi);
 | 
						spiBegin(spi);
 | 
				
			||||||
	spiCommand(spi, 0x90);	// Read manufacturer ID
 | 
						spiCommand(spi, 0x90);	// Read manufacturer ID
 | 
				
			||||||
	spiCommand(spi, 0x00);  // Dummy byte 1
 | 
						spiCommand(spi, 0x00);  // Dummy byte 1
 | 
				
			||||||
@@ -588,7 +579,6 @@ static void spi_get_id(struct ff_spi *spi) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	spi_decode_id(spi);
 | 
						spi_decode_id(spi);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void spiOverrideSize(struct ff_spi *spi, uint32_t size) {
 | 
					void spiOverrideSize(struct ff_spi *spi, uint32_t size) {
 | 
				
			||||||
@@ -813,9 +803,7 @@ int spiWrite(struct ff_spi *spi, uint32_t addr, const uint8_t *data, unsigned in
 | 
				
			|||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int total = count;
 | 
					 | 
				
			||||||
	while (count) {
 | 
						while (count) {
 | 
				
			||||||
		// printf("\rProgramming @ %06x / %06x", addr, total);
 | 
					 | 
				
			||||||
		fflush(stdout);
 | 
							fflush(stdout);
 | 
				
			||||||
		spiBegin(spi);
 | 
							spiBegin(spi);
 | 
				
			||||||
		spiCommand(spi, 0x06);
 | 
							spiCommand(spi, 0x06);
 | 
				
			||||||
@@ -837,8 +825,6 @@ int spiWrite(struct ff_spi *spi, uint32_t addr, const uint8_t *data, unsigned in
 | 
				
			|||||||
		addr += i;
 | 
							addr += i;
 | 
				
			||||||
		spi_wait_for_not_busy(spi);
 | 
							spi_wait_for_not_busy(spi);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// printf("\rProgramming @ %06x / %06x", addr, total);
 | 
					 | 
				
			||||||
	// printf("  Done\n");
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user