| 
					
				 | 
			
			
				@@ -1140,6 +1140,51 @@ void setup() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Force SD card update. Otherwise the SD card update is done from loop() on card.checkautostart(false),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// but this times out if a blocking dialog is shown in setup(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	card.initsd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef DEBUG_SD_SPEED_TEST 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (card.cardOK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint8_t* buff = (uint8_t*)block_buffer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint32_t block = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint32_t sumr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint32_t sumw = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (int i = 0; i < 1024; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			uint32_t u = micros(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bool res = card.card.readBlock(i, buff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			u = micros() - u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				printf_P(PSTR("readBlock %4d 512 bytes %lu us\n"), i, u); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sumr += u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				u = micros(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				res = card.card.writeBlock(i, buff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				u = micros() - u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					printf_P(PSTR("writeBlock %4d 512 bytes %lu us\n"), i, u); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					sumw += u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					printf_P(PSTR("writeBlock %4d error\n"), i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				printf_P(PSTR("readBlock %4d error\n"), i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint32_t avg_rspeed = (1024 * 1000000) / (sumr / 512); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uint32_t avg_wspeed = (1024 * 1000000) / (sumw / 512); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printf_P(PSTR("avg read speed %lu bytes/s\n"), avg_rspeed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printf_P(PSTR("avg write speed %lu bytes/s\n"), avg_wspeed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printf_P(PSTR("Card NG!\n")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif DEBUG_SD_SPEED_TEST 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_X, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_Y, 0); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1845,6 +1890,7 @@ void homeaxis(int axis, uint8_t cnt, uint8_t* pstep) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // for the stall guard to work. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         current_position[axis] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		set_destination_to_current(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        destination[axis] = 11.f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         destination[axis] = 3.f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6527,6 +6573,11 @@ void get_coordinates() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (next_feedrate > MAX_SILENT_FEEDRATE) next_feedrate = MAX_SILENT_FEEDRATE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif //MAX_SILENT_FEEDRATE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(next_feedrate > 0.0) feedrate = next_feedrate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (!seen[0] && !seen[1] && !seen[2] && seen[3]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		float e_max_speed =  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		printf_P(PSTR("E MOVE speed %7.3f\n"), feedrate / 60) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |