diff --git a/local-tool/server/internal/driver/kneron/kl720_driver.go b/local-tool/server/internal/driver/kneron/kl720_driver.go index a4b3cc5..5f2ab30 100644 --- a/local-tool/server/internal/driver/kneron/kl720_driver.go +++ b/local-tool/server/internal/driver/kneron/kl720_driver.go @@ -289,14 +289,27 @@ func (d *KneronDriver) Connect() error { d.mu.Unlock() // First connect after server start: reset device to clear stale models. - if needsReset { - d.driverLog("INFO", "[kneron] first connect after server start — resetting device to clear stale model...") + // + // KL520 跳過 reset:KL520 是 USB Boot 裝置,reset 會退回 Loader 模式 + // (firmware 從 RAM 清掉),然後需要重新載 firmware(~30 秒)+ USB + // 重新枚舉(~8 秒)。這讓原本 2 秒的 connect 變成 60+ 秒,而且 + // Loader 模式的 connect_devices_without_check 不穩定(常需重試)。 + // + // KL520 每次 connect 本來就是 clean state(RAM-based firmware,斷電 + // 即清),不需要主動 reset 清 stale model。如果真的有殘留 model, + // 下次 load_model 前的 restartBridge 會處理。 + // + // KL720 是 flash-based 裝置,firmware 和 model 會保留在 flash,reset + // 清 stale model 才有意義。 + if needsReset && d.chipType == "KL720" { + d.driverLog("INFO", "[kneron] first connect after server start — resetting KL720 to clear stale model...") if err := d.restartBridge(); err != nil { d.driverLog("WARN", "[kneron] reset on connect failed (non-fatal): %v", err) - // Non-fatal: device is still connected, just might have stale model } else { d.driverLog("INFO", "[kneron] device reset complete — clean state ready") } + } else if needsReset { + d.driverLog("INFO", "[kneron] %s: skipping reset on first connect (USB Boot device, clean state by default)", d.chipType) } return nil