Ver código fonte

Prevent 16bits of data hanging around and confusing the fifo empty check

Michael McMaster 4 anos atrás
pai
commit
d00825b0da

+ 2 - 1
lib/SCSI2SD/STM32CubeMX/2021/2021.ioc

@@ -54,8 +54,9 @@ FMC.AddressHoldTime1=2
 FMC.AddressSetupTime1=4
 FMC.BusTurnAroundDuration1=2
 FMC.DataSetupTime1=8
-FMC.IPParameters=AddressSetupTime1,AddressHoldTime1,DataSetupTime1,BusTurnAroundDuration1,NSMemoryDataWidth1-NorPsramChipSelect1_1,WriteOperation1-NorPsramChipSelect1_1
+FMC.IPParameters=AddressSetupTime1,AddressHoldTime1,DataSetupTime1,BusTurnAroundDuration1,NSMemoryDataWidth1-NorPsramChipSelect1_1,WriteOperation1-NorPsramChipSelect1_1,WriteFifo1
 FMC.NSMemoryDataWidth1-NorPsramChipSelect1_1=FMC_NORSRAM_MEM_BUS_WIDTH_16
+FMC.WriteFifo1=FMC_WRITE_FIFO_DISABLE
 FMC.WriteOperation1-NorPsramChipSelect1_1=FMC_WRITE_OPERATION_ENABLE
 File.Version=6
 KeepUserPlacement=false

+ 3 - 4
lib/SCSI2SD/STM32CubeMX/2021/Src/fmc.c

@@ -50,13 +50,12 @@ void MX_FMC_Init(void)
   hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
   hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
   hsram1.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE;
-  // WE MAY start writing another 512 bytes before this FIFO is empty!
 
   hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
   /* Timing */
 
   // 1 clock to read the address, + 1 for synchroniser skew
-  Timing.AddressSetupTime = 5;
+  Timing.AddressSetupTime = 4;
   Timing.AddressHoldTime = 2;
 
   // Writes to device:
@@ -67,12 +66,12 @@ void MX_FMC_Init(void)
   // Reads from device:
   //   3 for syncroniser
   //   1 to write back to fsmc bus.
-  Timing.DataSetupTime = 9;
+  Timing.DataSetupTime = 8;
 
   // Allow a clock for us to release signals
   // Need to avoid both devices acting as outputs
   // on the multiplexed lines at the same time.
-  Timing.BusTurnAroundDuration = 3;
+  Timing.BusTurnAroundDuration = 2;
 
   Timing.CLKDivision = 16; // Ignored for async
   Timing.DataLatency = 17; // Ignored for async

+ 1 - 1
lib/SCSI2SD/src/firmware/config.c

@@ -36,7 +36,7 @@
 
 #include <string.h>
 
-static const uint16_t FIRMWARE_VERSION = 0x0648;
+static const uint16_t FIRMWARE_VERSION = 0x0649;
 
 // Optional static config
 extern uint8_t* __fixed_config;

+ 11 - 1
lib/SCSI2SD/src/firmware/main.c

@@ -115,7 +115,17 @@ void mainInit()
         }
         else
         {
-            BSP_SD_WriteBlocks_DMA(scsiDev.data, h * 2000, 1);
+            uint8_t random[1024];
+            for (int p = 0; p < 512; ++p) random[p] = h + p ^ 0xAA;
+            BSP_SD_WriteBlocks_DMA(random, h * 2000, 1);
+            BSP_SD_ReadBlocks_DMA(scsiDev.data, h * 2000, 1);
+            BSP_SD_WriteBlocks_DMA(random, h * 2000 + 1, 2);
+            BSP_SD_ReadBlocks_DMA(&(scsiDev.data[512]), h * 2000 + 1, 2);
+            if (memcmp(random, scsiDev.data, 512) ||
+                memcmp(random, &(scsiDev.data[512]), 1024))
+            {
+                while (1) {}
+            }
         }
     }
     s2s_ledOff();

Diferenças do arquivo suprimidas por serem muito extensas
+ 701 - 691
lib/SCSI2SD/src/firmware/scsiPhy.c


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff