diff --git a/README.md b/README.md
index 7fc7595..cf0a81f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
## grblHAL ##
-Latest build date is 20250926, see the [changelog](changelog.md) for details.
+Latest build date is 20250928, see the [changelog](changelog.md) for details.
> [!NOTE]
> A settings reset will be performed on an update of builds prior to 20241208. Backup and restore of settings is recommended.
@@ -89,4 +89,4 @@ G/M-codes not supported by [legacy Grbl](https://github.com/gnea/grbl/wiki) are
Some [plugins](https://github.com/grblHAL/plugins) implements additional M-codes.
---
-20250926
+20250928
diff --git a/changelog.md b/changelog.md
index 1b93552..dd6eba1 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,18 @@
## grblHAL changelog
+Build 20250928
+
+Core:
+
+* Fix for crash when multiple G95 mode motions are commanded.
+Ref. iMXRT1062 discussion [#100](https://github.com/grblHAL/iMXRT1062/discussions/100).
+
+Drivers:
+
+* ESP32: fix for MPG mode switch handling causing compilation error. Ref. Web Builder [discussion comment](https://github.com/grblHAL/core/discussions/645#discussioncomment-14529145).
+
+---
+
Build 20250927
Core:
diff --git a/grbl.h b/grbl.h
index d4a6b6e..5c7cc9e 100644
--- a/grbl.h
+++ b/grbl.h
@@ -42,7 +42,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
-#define GRBL_BUILD 20250927
+#define GRBL_BUILD 20250928
#define GRBL_URL "https://github.com/grblHAL"
diff --git a/stepper.c b/stepper.c
index bb1cc75..08c0ea9 100644
--- a/stepper.c
+++ b/stepper.c
@@ -414,7 +414,7 @@ ISR_CODE void ISR_FUNC(stepper_driver_interrupt_handler)(void)
if(st.exec_block) {
#if SPINDLE_SYNC_ENABLE
- if(st.new_block && st.exec_segment->spindle_sync) {
+ if(st.new_block && st.exec_segment->spindle_sync && hal.stepper.pulse_start != st_spindle_sync_out) {
spindle_tracker.stepper_pulse_start = hal.stepper.pulse_start;
hal.stepper.pulse_start = st_spindle_sync_out;
}
@@ -1225,7 +1225,7 @@ void st_prep_buffer (void)
uint32_t cycles = (uint32_t)ceilf(cycles_per_min * inv_rate); // (cycles/step)
// Record end position of segment relative to block if spindle synchronized motion
- if((prep_segment->spindle_sync = pl_block->spindle.state.synchronized)) {
+ if((prep_segment->spindle_sync = pl_block->spindle.state.synchronized && !pl_block->condition.units_per_rev)) {
prep.target_position += dt * prep.target_feed;
prep_segment->cruising = prep.ramp_type == Ramp_Cruise;
prep_segment->target_position = prep.target_position; //st_prep_block->millimeters - pl_block->millimeters;