public async Task SaveEeprom(byte[] eeprom)
        {
            var chunk   = new byte[32];
            var chunks  = eeprom.Length / chunk.Length;
            var offset  = 0;
            var wasOpen = false;
            ExceptionDispatchInfo capturedException = null;

            try {
                wasOpen = Serial.IsOpen;
                Serial.OpenPort();
                for (var chunkN = 0; chunkN < chunks; chunkN++)
                {
                    Buffer.BlockCopy(eeprom, offset, chunk, 0, chunk.Length);
                    var res = await Serial.JsonCommand(CBTCommand.SaveEeprom(chunkN, chunk));

                    if (!res.ContainsKey("result") || res["result"] != "success")
                    {
                        throw new Exception("Error saving EEPROM.");
                    }
                    offset += chunk.Length;
                }
            }
            catch (Exception ex) {
                capturedException = ExceptionDispatchInfo.Capture(ex);
            }
            if (Serial.IsOpen && !wasOpen)
            {
                await Serial.ClosePort();
            }
            capturedException?.Throw();
        }