Michael McMaster 4 anni fa
parent
commit
033922ee8d

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

@@ -114,6 +114,7 @@ void mainLoop()
 	sdPoll();
 #endif
 
+    // TODO test if USB transfer is in progress
 	if (unlikely(scsiDev.phase == BUS_FREE))
 	{
 		if (unlikely(s2s_elapsedTime_ms(lastSDPoll) > 200))

+ 6 - 0
lib/SCSI2SD/src/firmware/time.h

@@ -24,7 +24,13 @@ uint32_t s2s_getTime_ms(void); // Returns milliseconds since init
 uint32_t s2s_diffTime_ms(uint32_t start, uint32_t end);
 uint32_t s2s_elapsedTime_ms(uint32_t since);
 
+#ifdef STM32F2xx
 #define s2s_cpu_freq 108000000LL
+#endif
+#ifdef STM32F4xx
+#define s2s_cpu_freq 180000000LL
+#endif
+
 #define s2s_delay_ms(delay) s2s_delay_clocks((delay) * (s2s_cpu_freq / 1000))
 #define s2s_delay_us(delay) s2s_delay_clocks((delay) * (s2s_cpu_freq / 1000000))
 void s2s_delay_clocks(uint32_t delay);

+ 12 - 12
lib/SCSI2SD/src/firmware/usb_device/usbd_msc_scsi.c

@@ -491,13 +491,13 @@ static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *para
       return -1;
     } 
     
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
+    hmsc->scsi_blk_addr = ((uint32_t)params[2] << 24) | \
+      ((uint32_t)params[3] << 16) | \
+        ((uint32_t)params[4] <<  8) | \
+          (uint32_t)params[5];
     
-    hmsc->scsi_blk_len =  (params[7] <<  8) | \
-      params[8];  
+    hmsc->scsi_blk_len =  ((uint32_t)params[7] <<  8) | \
+      (uint32_t)params[8];  
     
     
     
@@ -573,12 +573,12 @@ static int8_t SCSI_Write10 (USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *pa
     } 
     
     
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    hmsc->scsi_blk_len = (params[7] <<  8) | \
-      params[8];  
+    hmsc->scsi_blk_addr = ((uint32_t)params[2] << 24) | \
+      ((uint32_t)params[3] << 16) | \
+        ((uint32_t)params[4] <<  8) | \
+          (uint32_t)params[5];
+    hmsc->scsi_blk_len = ((uint32_t)params[7] <<  8) | \
+      (uint32_t)params[8];  
     
     /* check if LBA address is in the right range */
     if(SCSI_CheckAddressRange(pdev,