Общение с батареями от ноутбука.

Komandir
Offline
Зарегистрирован: 18.08.2018

Это их стандартная "отмазка" на нестандартное поведение банок. Плюс  до кучи некоторые еще и предохранитель пережигают, что бы не заряжалась больше батарея.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Komandir пишет:

Это их стандартная "отмазка" на нестандартное поведение банок. Плюс  до кучи некоторые еще и предохранитель пережигают, что бы не заряжалась больше батарея.

ответил выше, на банках напряжение есть

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Подскажите пожалуйста, этот скетч на node mcu v3 будет работать? (контроллер на батарее bq20z75)

Спасибо

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

grigory.dm пишет:

Подскажите пожалуйста, этот скетч на node mcu v3 будет работать? (контроллер на батарее bq20z75)

Спасибо

у меня работает, ядро 3.0.2, да, периодически валится стек, но работает, как работает описал выше, подключал дюпонами, штыри-гнёзда
Немного правленый код под ESP8266:
 

  
/*
 * SmartBattery.ino https://github.com/dsa-a/Arduino-Smart-Battery
 * Copyright (C) 2021, Andrei Egorov
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see href="http://www.gnu.org/licenses/
 */
// http://arduino.ru/forum/proekty/obshchenie-s-batareyami-ot-noutbuka
// Версия для ESP8266 ядро 3.0.2
// распиновка 
// GND - p-  (G)
// SDA - CLK (D1)
// SCL - DAT (D2)
// 

#define CLOCK_I2C 50000   // подобрать частоту I2C для безошибочного чтения
#ifndef CLOCK_I2C
#define CLOCK_I2C 100000
#endif

#define ERROR_I2C         // пропускаем или выводим нечитаемые блоки (участки кода)

#include <Wire.h>         // для AVR !!! The WIRE library must be edited to increase the buffer to 34 (0x22) bytes !!!

//#define debug

#define addr 0x0B
#define new_capacity 4400
#define unseal_key_1 0x0414
#define unseal_key_2 0x3672
#define full_access_key_1 0xFFFF
#define full_access_key_2 0xFFFF
#define pf_clear_key_1 0x2673
#define pf_clear_key_2 0x1712
#define year (__DATE__[7]-'0')*1000+(__DATE__[8]-'0')*100+(__DATE__[9]-'0')*10+(__DATE__[10]-'0')
#define month (__DATE__[0] == 'J' && __DATE__[1] == 'a')  ? 1 : \
              (__DATE__[0] == 'F')                        ? 2 : \
              (__DATE__[0] == 'M' && __DATE__[2] == 'r')  ? 3 : \
              (__DATE__[0] == 'A' && __DATE__[1] == 'p')  ? 4 : \
              (__DATE__[0] == 'M' && __DATE__[2] == 'y')  ? 5 : \
              (__DATE__[0] == 'J' && __DATE__[2] == 'n')  ? 6 : \
              (__DATE__[0] == 'J' && __DATE__[2] == 'l')  ? 7 : \
              (__DATE__[0] == 'A' && __DATE__[1] == 'u')  ? 8 : \
              (__DATE__[0] == 'S')                        ? 9 : \
              (__DATE__[0] == 'O')                        ? 10 : \
              (__DATE__[0] == 'N')                        ? 11 : \
              (__DATE__[0] == 'D')                        ? 12 : 0
#define day (((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')-'0')*10+(__DATE__[5]-'0')

byte buff[34];

#if defined (debug)
byte sp;

byte PEC(byte p, byte b) {
  b^=p;
  for (byte i=0; i<8; i++ ) {
    byte t=b&0x80;
    b<<=1;
    if (t!=0) b^=0x07;
  }
  return b;
}
#endif

void CheckWireStatus(byte wire_status) {
  if (wire_status!=0) {
    Serial.print(F("Wire error - "));
    Serial.println(wire_status);
    while (true) ;
  }
}

void SMBCommand(byte comm) {
  Wire.beginTransmission(addr);
  Wire.write(comm);
  CheckWireStatus(Wire.endTransmission(false));
}

void Read(byte n) {
  Wire.requestFrom(addr,n+1);
#if defined (debug)
  byte p=PEC(sp, (addr<<1)+1);
#endif
  byte b=Wire.available();
  for (byte i=0; i<b; i++) {
    buff[i]=Wire.read();
#if defined (debug)
    if (i<(b-1)) p=PEC(p, buff[i]);
    printHEX(buff[i]);
    Serial.print(",");
#endif
  }
#if defined (debug)
  printHEX(p);
  Serial.println();
#endif
}

void ReadSMB(byte comm) {
  SMBCommand(comm);
#if defined (debug)
  sp=PEC(PEC(0, addr<<1), comm);
#endif
  Read(2);
}

void ReadSMB(word comm) {
  Wire.beginTransmission(addr);
  Wire.write(00);
  Wire.write(lowByte(comm));
  Wire.write(highByte(comm));
  CheckWireStatus(Wire.endTransmission());
  ReadSMB(byte(0x00));
}

void ReadBlockSMB(byte comm) {
  SMBCommand(comm);
  Wire.requestFrom(addr,1);
  byte b=Wire.read();
  SMBCommand(comm);
#if defined (debug)
  sp=PEC(PEC(0, addr<<1), comm);
#endif
  Read(b+1);
}

void WriteSMBWord(byte comm, word data) {
  Wire.beginTransmission(addr);
  Wire.write(comm);
  Wire.write(lowByte(data));
  Wire.write(highByte(data));
  CheckWireStatus(Wire.endTransmission());
}

void ReadSMBSubclass(byte id, byte page) {
  WriteSMBWord(0x77, word(id));
  delay(100);
  ReadBlockSMB(page);
}

void WriteSMBSubclass(byte id, byte page) {
  WriteSMBWord(0x77, word(id));
  delay(100);
  Wire.beginTransmission(addr);
  Wire.write(page);
  for (byte i=0;i<=buff[0];i++) Wire.write(buff[i]);
  CheckWireStatus(Wire.endTransmission());
  delay(100);
}

void printHEX(byte b) {
  if (b<16) Serial.print("0");
  Serial.print(b,HEX);
}

void printBlock() {
  for (byte i=1; i<=buff[0]; i++) Serial.print(char(buff[i]));
  Serial.println();
}

void Read123() {
  ReadSMB(word(0x0001)); Serial.print(F("Device Type: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  ReadSMB(word(0x0002)); Serial.print(F("Firmware Version: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  ReadSMB(word(0x0003)); Serial.print(F("Hardware Version: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
}

void info() {

  ReadSMB(byte(0x18)); Serial.print(F("DesignCapacity: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mAh");
  ReadSMB(byte(0x10)); Serial.print(F("FullChargeCapacity: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mAh");
  ReadSMB(byte(0x17)); Serial.print(F("CycleCount: ")); Serial.println(buff[1]*256+buff[0]);
  ReadSMB(byte(0x1B)); Serial.print(F("Date: ")); Serial.print(1980+(buff[1]>>1)); Serial.print("."); Serial.print(((buff[1]&0b00000001)<<3)+(buff[0]>>5));Serial.print("."); Serial.println(buff[0]&0b00011111);
  ReadSMB(byte(0x19)); Serial.print(F("DesignVoltage: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadBlockSMB(0x20); Serial.print(F("ManufName: ")); printBlock();
  ReadBlockSMB(0x21); Serial.print(F("DeviceName: ")); printBlock(); 
  ReadSMB(byte(0x1C)); Serial.print(F("SerialNumber: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  ReadSMB(byte(0x14)); Serial.print(F("ChargingCurrent: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mA");
  ReadSMB(byte(0x15)); Serial.print(F("ChargingVoltage: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadBlockSMB(0x22); Serial.print(F("DeviceChemistry: ")); printBlock(); 

  ReadSMB(byte(0x08)); Serial.print(F("Temperature: ")); Serial.print(float(buff[1]*256+buff[0])/10-273); Serial.println(" C");
  ReadSMB(byte(0x09)); Serial.print(F("Voltage: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadSMB(byte(0x0A)); Serial.print(F("Current: ")); Serial.print(int(buff[1]*256+buff[0])); Serial.println(" mA");
  ReadSMB(byte(0x0D)); Serial.print(F("RelativeSOC: ")); Serial.print(buff[0]); Serial.println(" %");
  ReadSMB(byte(0x0E)); Serial.print(F("AbsoluteSOC: ")); Serial.print(buff[0]); Serial.println(" %");
  ReadSMB(byte(0x0F)); Serial.print(F("RemainingCapacity: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mAh");

#ifndef ERROR_I2C  
  ReadSMB(byte(0x3C)); Serial.print(F("VCELL4: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadSMB(byte(0x3D)); Serial.print(F("VCELL3: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadSMB(byte(0x3E)); Serial.print(F("VCELL2: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
  ReadSMB(byte(0x3F)); Serial.print(F("VCELL1: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
#endif
//  ReadSMB(byte(0x3C)); Serial.print(F("VCELL4: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
//  ReadSMB(byte(0x3D)); Serial.print(F("VCELL3: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
//  ReadSMB(byte(0x3E)); Serial.print(F("VCELL2: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");
//  ReadSMB(byte(0x3F)); Serial.print(F("VCELL1: ")); Serial.print(buff[1]*256+buff[0]); Serial.println(" mV");

  ReadSMB(byte(0x1A)); Serial.print(F("SpecificationInfo: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  ReadSMB(byte(0x16)); Serial.print(F("Battery Status: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  if (buff[1]&0b10000000) Serial.print("OCA|");
  if (buff[1]&0b01000000) Serial.print("TCA|");
  if (buff[1]&0b00010000) Serial.print("OTA|");
  if (buff[1]&0b00001000) Serial.print("TDA|");
  if (buff[1]&0b00000010) Serial.print("RCA|");
  if (buff[1]&0b00000001) Serial.print("RTA|");
  if (buff[0]&0b10000000) Serial.print("INIT|");
  if (buff[0]&0b01000000) Serial.print("DSG|");
  if (buff[0]&0b00100000) Serial.print("FC|");
  if (buff[0]&0b00010000) Serial.print("FD|");
  if (buff[0]&0b00001000) Serial.print("EC3|");
  if (buff[0]&0b00000100) Serial.print("EC2|");
  if (buff[0]&0b00000010) Serial.print("EC1|");
  if (buff[0]&0b00000001) Serial.print("EC0|");
  Serial.println();
  ReadSMB(word(0x0054)); Serial.print(F("Operation Status: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
  if (buff[1]&0b10000000) Serial.print("PRES|");
  if (buff[1]&0b01000000) Serial.print("FAS|");
  if (buff[1]&0b00100000) Serial.print("SS|");
  if (buff[1]&0b00010000) Serial.print("CSV|");
  if (buff[1]&0b00000100) Serial.print("LDMD|");
  if (buff[0]&0b10000000) Serial.print("WAKE|");
  if (buff[0]&0b01000000) Serial.print("DSG|");
  if (buff[0]&0b00100000) Serial.print("XDSG|");
  if (buff[0]&0b00010000) Serial.print("XDSGI|");
  if (buff[0]&0b00000100) Serial.print("R_DIS|");
  if (buff[0]&0b00000010) Serial.print("VOK|");
  if (buff[0]&0b00000001) Serial.print("QEN|");
  Serial.println();
  if (buff[1]&0b00100000) {
    Serial.println(F("Sealed"));
    Read123();
  } else {
    Serial.println(F("Unsealed"));
    ReadSMB(byte(0x0C)); Serial.print(F("MaxError: ")); Serial.print(buff[0]); Serial.println(" %");
    ReadSMB(word(0x0051)); Serial.print(F("SafetyStatus: ")); 
    if ((buff[1]==0)&&(buff[0]==0)) {
      Serial.println("OK");
    } else {
      printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
      if (buff[1]&0b10000000) Serial.print("OTD|");
      if (buff[1]&0b01000000) Serial.print("OTC|");
      if (buff[1]&0b00100000) Serial.print("OCD|");
      if (buff[1]&0b00010000) Serial.print("OCC|");
      if (buff[1]&0b00001000) Serial.print("OCD2|");
      if (buff[1]&0b00000100) Serial.print("OCC2|");
      if (buff[1]&0b00000010) Serial.print("PUV|");
      if (buff[1]&0b00000001) Serial.print("POV|");
      if (buff[0]&0b10000000) Serial.print("CUV|");
      if (buff[0]&0b01000000) Serial.print("COV|");
      if (buff[0]&0b00100000) Serial.print("PF|");
      if (buff[0]&0b00010000) Serial.print("HWDG|");
      if (buff[0]&0b00001000) Serial.print("WDF|");
      if (buff[0]&0b00000100) Serial.print("AOCD|");
      if (buff[0]&0b00000010) Serial.print("SCC|");
      if (buff[0]&0b00000001) Serial.print("SCD|");
      Serial.println();
    };
    ReadSMB(word(0x0053)); Serial.print(F("PFStatus: ")); 
    if ((buff[1]==0)&&(buff[0]==0)) {
      Serial.println("OK");
    } else {
      printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
      if (buff[1]&0b10000000) Serial.print("FBF|");
      if (buff[1]&0b00010000) Serial.print("SOPT|");
      if (buff[1]&0b00001000) Serial.print("SOCD|");
      if (buff[1]&0b00000100) Serial.print("SOCC|");
      if (buff[1]&0b00000010) Serial.print("AFE_P|");
      if (buff[1]&0b00000001) Serial.print("AFE_C|");
      if (buff[0]&0b10000000) Serial.print("DFF|");
      if (buff[0]&0b01000000) Serial.print("DFETF|");
      if (buff[0]&0b00100000) Serial.print("CFETF|");
      if (buff[0]&0b00010000) Serial.print("CIM|");
      if (buff[0]&0b00001000) Serial.print("SOTD|");
      if (buff[0]&0b00000100) Serial.print("SOTC|");
      if (buff[0]&0b00000010) Serial.print("SOV|");
      if (buff[0]&0b00000001) Serial.print("PFIN|");
      Serial.println();
    };
    ReadSMB(word(0x0055)); Serial.print(F("Charging Status: ")); 
    if ((buff[1]==0)&&(buff[0]==0)) {
      Serial.println("OK");
    } else {
      printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
      if (buff[1]&0b10000000) Serial.print("XCHG|");
      if (buff[1]&0b01000000) Serial.print("CHGSUSP|");
      if (buff[1]&0b00100000) Serial.print("PCHG|");
      if (buff[1]&0b00010000) Serial.print("MCHG|");
      if (buff[1]&0b00001000) Serial.print("TCHG1|");
      if (buff[1]&0b00000100) Serial.print("TCHG2|");
      if (buff[1]&0b00000010) Serial.print("FCHG|");
      if (buff[1]&0b00000001) Serial.print("PULSE|");
      if (buff[0]&0b10000000) Serial.print("PLSOFF|");
      if (buff[0]&0b01000000) Serial.print("CB|");
      if (buff[0]&0b00100000) Serial.print("PCMTO|");
      if (buff[0]&0b00010000) Serial.print("FCMTO|");
      if (buff[0]&0b00001000) Serial.print("OCHGV|");
      if (buff[0]&0b00000100) Serial.print("OCHGI|");
      if (buff[0]&0b00000010) Serial.print("OC|");
      if (buff[0]&0b00000001) Serial.print("XCHGLV|");
      Serial.println();
    };
    /*
    ReadSMB(byte(0x46)); Serial.print(F("FETControl: ")); 
    if (buff[0]==0) {
      Serial.println("OK");
    } else {
      printHEX(buff[0]); Serial.println(" Hex");
      if (buff[0]&0b00010000) Serial.print("OD|");
      if (buff[0]&0b00001000) Serial.print("ZVCHG|");
      if (buff[0]&0b00000100) Serial.print("CHG|");
      if (buff[0]&0b00000010) Serial.print("DSG|");
      Serial.println();
    };
   /* *
    ReadSMBSubclass(82,0x78);
    Serial.print(F("Update Status: ")); Serial.println(buff[13]);
    Serial.print(F("Qmax Cell0: ")); Serial.println(buff[1]*256+buff[2]);
    Serial.print(F("Qmax Cell1: ")); Serial.println(buff[3]*256+buff[4]);
    Serial.print(F("Qmax Cell2: ")); Serial.println(buff[5]*256+buff[6]);
    Serial.print(F("Qmax Cell3: ")); Serial.println(buff[7]*256+buff[8]);
    Serial.print(F("Qmax Pack : ")); Serial.println(buff[9]*256+buff[10]);
    for (byte i=88; i<=91; i++) {
      ReadSMBSubclass(i,0x78);
      Serial.print("Cell");
      Serial.print(i-88);
      Serial.print(" R_a flag: "); printHEX(buff[1]); printHEX(buff[2]); Serial.println();
    }
   */
    Read123();
    ReadSMB(word(0x0006)); Serial.print(F("Manufacturer Status: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
    if (buff[1]&0b10000000) Serial.print("FET1|");
    if (buff[1]&0b01000000) Serial.print("FET0|");
    if (buff[1]&0b00100000) Serial.print("PF1|");
    if (buff[1]&0b00010000) Serial.print("PF0|");
    if (buff[1]&0b00001000) Serial.print("STATE3|");
    if (buff[1]&0b00000100) Serial.print("STATE2|");
    if (buff[1]&0b00000010) Serial.print("STATE1|");
    if (buff[1]&0b00000001) Serial.print("STATE0|");
    Serial.println();
    ReadSMB(word(0x0008)); Serial.print(F("Chemistry ID: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
    delay(100);
    ReadSMB(byte(0x03)); Serial.print(F("BatteryMode: ")); printHEX(buff[1]); printHEX(buff[0]); Serial.println(" Hex");
    if (buff[1]&0b10000000) Serial.print("CapM|");
    if (buff[1]&0b01000000) Serial.print("ChgM|");
    if (buff[1]&0b00100000) Serial.print("AM|");
    if (buff[1]&0b00000010) Serial.print("PB|");
    if (buff[1]&0b00000001) Serial.print("CC|");
    if (buff[0]&0b10000000) Serial.print("CF|");
    if (buff[0]&0b00000010) Serial.print("PBS|");
    if (buff[0]&0b00000001) Serial.print("ICC|");
    Serial.println();
  };
  
}

void setup() {
  Wire.begin();  
  Wire.setClock(CLOCK_I2C);   
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("Arduino Smart Battery"));
  Serial.println(F("Several utilities for working with TI bq20z... IC"));
  Serial.println(F("Press Enter..."));
  while (Serial.available()==0);
  Serial.print(F("Checking communication with the device at address 0x"));
  printHEX(addr);
  Serial.println("...");
  byte st;
  do {
    Wire.beginTransmission(addr);
    st=Wire.endTransmission();
    if (st!=0) Serial.println(F("The device is not responding.")); delay(1000);
  } while (st!=0);
  Serial.println(F("The device was found !!!"));
}

void loop() {
  delay(1);
  
  if (Serial.available()==0) {
    Serial.println(F("--------------------"));
    Serial.println(F("Select operation:"));
    Serial.println(F("1. Read pack info."));
    Serial.println(F("2. Pack Reset."));
    Serial.println(F("3. Unsealing a pack."));
    Serial.println(F("4. Move pack to Full Access mode."));
    Serial.println(F("5. Clearing a Permanent Failure."));
    Serial.println(F("6. Clearing CycleCount."));
    Serial.println(F("7. Setting current date."));
    Serial.println(F("8. Writing DesignCapacity, QMAX, Update status, Ra_table."));
    Serial.println(F("9. Begin the Impedance Track algorithm."));
    while (Serial.available()==0);
    Serial.println();
    Serial.println();
    Serial.println(F("**************************************"));
    switch (Serial.read()) {
      case 0x31:
        Serial.println(F("Pack Info..."));
        info();
        break;
      case 0x32:
        WriteSMBWord(0x00,0x0041);
        Serial.println(F("Reseting..."));
        delay(1000);
        break;
      case 0x33:
        WriteSMBWord(0x00,unseal_key_1);
        WriteSMBWord(0x00,unseal_key_2);
        Serial.println(F("Unsealing..."));
        break;
      case 0x34:
        WriteSMBWord(0x00,full_access_key_1);
        WriteSMBWord(0x00,full_access_key_2);
        Serial.println(F("Move to Full Access mode..."));
        break;
      case 0x35:
        WriteSMBWord(0x00,pf_clear_key_1);
        WriteSMBWord(0x00,pf_clear_key_2);
        Serial.println(F("Clearing a Permanent Failure..."));
        break;
      case 0x36:
        WriteSMBWord(0x17,0x0000);
        Serial.println(F("Clearing CycleCount..."));
        break;
      case 0x37:
        WriteSMBWord(0x1B,(year-1980)*512+int(month)*32+day);
        Serial.println(F("Setting current date..."));
        break;
      case 0x38:
        Serial.println(F("Writing DesignCapacity, QMAX, Update status, Ra_table..."));
        WriteSMBWord(0x18,new_capacity);
        delay(100);
        ReadSMBSubclass(82,0x78);
        buff[1]=highByte(new_capacity);
        buff[2]=lowByte(new_capacity);
        buff[3]=highByte(new_capacity);
        buff[4]=lowByte(new_capacity);
        buff[5]=highByte(new_capacity);
        buff[6]=lowByte(new_capacity);
        buff[7]=highByte(new_capacity);
        buff[8]=lowByte(new_capacity);
        buff[9]=highByte(new_capacity);
        buff[10]=lowByte(new_capacity);
        buff[13]=0x00;
        WriteSMBSubclass(82,0x78);
        for (byte i=88; i<=95; i++) {
          buff[0]=0x20;
          buff[1]=0xFF;
          buff[2]=(i<92) ? 0x55 : 0xFF;
          buff[3]=0x00;
          buff[4]=0xA0;
          buff[5]=0x00;
          buff[6]=0xA6;
          buff[7]=0x00;
          buff[8]=0x99;
          buff[9]=0x00;
          buff[10]=0x97;
          buff[11]=0x00;
          buff[12]=0x91;
          buff[13]=0x00;
          buff[14]=0x98;
          buff[15]=0x00;
          buff[16]=0xB0;
          buff[17]=0x00;
          buff[18]=0xCC;
          buff[19]=0x00;
          buff[20]=0xDE;
          buff[21]=0x00;
          buff[22]=0xFE;
          buff[23]=0x01;
          buff[24]=0x3B;
          buff[25]=0x01;
          buff[26]=0xB5;
          buff[27]=0x02;
          buff[28]=0x8B;
          buff[29]=0x03;
          buff[30]=0xE9;
          buff[31]=0x05;
          buff[32]=0xB2;
          WriteSMBSubclass(i,0x78);
        }
        break;
      case 0x39:
        WriteSMBWord(0x00,0x0021);
        Serial.println(F("Begin the Impedance Track algorithm..."));
        break;
    }
  } else Serial.read();
}

Это всё, что смог считать из своей батареи, я так понял некоторые ячейки не читаются:
 

DesignCapacity: 4400 mAh
FullChargeCapacity: 631 mAh
CycleCount: 140
Date: 2009.6.1
DesignVoltage: 11100 mV
ManufName: SMP-LGC2.2
DeviceName: DELL Y823G961
SerialNumber: 0DD9 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 12600 mV
DeviceChemistry: LION
Temperature: 25.80 C
Voltage: 10210 mV
Current: 0 mA
RelativeSOC: 0 %
AbsoluteSOC: 0 %
RemainingCapacity: 0 mAh
SpecificationInfo: 0021 Hex
Battery Status: 02D0 Hex
RCA|INIT|DSG|FD|
Operation Status: 8E00 Hex
PRES|LDMD|
Unsealed
MaxError: 2 %
SafetyStatus: 8E00 Hex
OTD|OCD2|OCC2|PUV|
PFStatus: 8E00 Hex
FBF|SOCD|SOCC|AFE_P|
Charging Status: 8E00 Hex
XCHG|TCHG1|TCHG2|FCHG|
Device Type: 8E00 Hex
Firmware Version: 8E00 Hex
Hardware Version: 8E00 Hex
Manufacturer Status: 8E00 Hex
FET1|STATE3|STATE2|STATE1|
Chemistry ID: 8E00 Hex
BatteryMode: 6000 Hex
ChgM|AM|

 

Komandir
Offline
Зарегистрирован: 18.08.2018

ua6em начиная с 21 строки результаты одинаковы 8E00 я бы на них не полагался.

Вам надо изучить даташит на свой чип и по нему уже смотреть что какие биты означают.

Я делал по даташиту bq20z95 и далеко не факт что флаги на вашем чипе находятся в тех же битах.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Komandir пишет:

ua6em начиная с 21 строки результаты одинаковы 8E00 я бы на них не полагался.

Вам надо изучить даташит на свой чип и по нему уже смотреть что какие биты означают.

Я делал по даташиту bq20z95 и далеко не факт что флаги на вашем чипе находятся в тех же битах.

я догадывался, что что-то не так )))

grigory.dm
Offline
Зарегистрирован: 05.11.2021

.

grigory.dm
Offline
Зарегистрирован: 05.11.2021

..

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Подскажите,я правильно понял,что сами батареи отпаивать не нужно?ещё вопрос,если отпаять Батареи на время прошивки,резисторы тоже уже не потребуются? Найти нужные резисторы в закромах сложнее чем Ардуино оказалось)).

grigory.dm
Offline
Зарегистрирован: 05.11.2021

.

grigory.dm
Offline
Зарегистрирован: 05.11.2021

ua6em пишет:

Кстати, если править библиотеку Wire.h может лучше так?
 

#ifndef BUFFER_LENGTH
#define BUFFER_LENGTH 32
#endif

Тогда в начале скетча указываем нужную длину буфера:
 

// Настройка длины буфера Wire.h и twi.h
#define BUFFER_LENGTH 34
#define TWI_BUFFER_LENGTH BUFFER_LENGTH //34
 
#include <Wire.h>                //!!! The WIRE library must be edited to increase the buffer to 34 (0x22) bytes !!!
#include <utility/twi.h> 

 

Наконец дошли руки и у меня посмотреть батарею, плата NODE MCU LOLIN ESP8266
Подключение прямое -
// Версия для ESP8266 ядро 3.0.2
// распиновка
// GND - p-
// SDA - CLK (D1)
// SCL - DAT (D2)
 

Pack Info...
DesignCapacity: 4400 mAh
FullChargeCapacity: 631 mAh
CycleCount: 140
Date: 2009.6.1
DesignVoltage: 11100 mV
ManufName: SMP-LGC2.2
DeviceName: DELL Y823G961
SerialNumber: 0DD9 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 12600 mV
DeviceChemistry: LION
Temperature: 28.10 C
Voltage: 10223 mV
Current: 0 mA
RelativeSOC: 0 %
AbsoluteSOC: 0 %
RemainingCapacity: 0 mAh
Wire error - 3

 

 

В схеме подключения для node MCU нужно с подключать
d1,d2 к 3.3v через резисторы?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

grigory.dm][quote=ua6em пишет:

 В схеме подключения для node MCU нужно с подключать d1,d2 к 3.3v через резисторы?

не 3.3 вольтам а к GND (G), без резисторов, напрямую, скетч поправил, теперь в стеке не сыпется

grigory.dm
Offline
Зарегистрирован: 05.11.2021

ua6em]</p> <p>[quote=grigory.dm пишет:
ua6em пишет:

 В схеме подключения для node MCU нужно с подключать d1,d2 к 3.3v через резисторы?

не 3.3 вольтам а к GND (G), без резисторов, напрямую, скетч поправил, теперь в стеке не сыпется

 

В случае с NodeMCU в это схеме какие резисторы вообще нужны? 

Komandir
Offline
Зарегистрирован: 18.08.2018
ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

по ESP8266 -

All digital IO pins are protected from over-voltage with a snap-back circuit connected between
the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V.
This provides protection from over-voltages and ESD. The output devices are also protected
from reversed voltages with diodes.

 

Komandir
Offline
Зарегистрирован: 18.08.2018

ua6em когда человек не знает где что на выводах батареи - можно и +-12 получить в зависимости от "везения"

grigory.dm
Offline
Зарегистрирован: 05.11.2021

ua6em пишет:

по ESP8266 -

All digital IO pins are protected from over-voltage with a snap-back circuit connected between
the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V.
This provides protection from over-voltages and ESD. The output devices are also protected
from reversed voltages with diodes.

 

Хорошо, что есть защита, но это не даёт ответа , какое напряжение на SDA и SCL может быть у батареи HP, не просто же так в схеме на первой страничке этой ветки схема с резисторами.

Кстати, тоже никак не найду точного  ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-

Помогите пожалуйста

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

grigory.dm пишет:

Кстати, тоже никак не найду точного  ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-

Помогите пожалуйста

может так:
P- - GND
D -  SCL (D2)
C -  SDA (D1)

D1 и D2 можно менять местами, я заливал сначала сканер I2C  и подобрал пины I2C по ответу контроллера батареи

  ЗЫ перекидывать пины естественно обесточив ардуину

 

Komandir
Offline
Зарегистрирован: 18.08.2018

grigory.dm будет очень  правильным - схему ноутбука изучить.

Можно загуглить распиновку по маркировке батареи или модели ноута.

Ну и вскрытие - там сразу можно найти GND +BATT

grigory.dm
Offline
Зарегистрирован: 05.11.2021

ua6em пишет:

grigory.dm пишет:

Кстати, тоже никак не найду точного  ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-

Помогите пожалуйста

может так:
P- - GND
D -  SCL (D2)
C -  SDA (D1)

D1 и D2 можно менять местами, я заливал сначала сканер I2C  и подобрал пины I2C по ответу контроллера батареи

  ЗЫ перекидывать пины естественно обесточив ардуину

 

Только таким методом получилось понять:

SDA - Data(D)

SCL - CLOCK(C)

Хапешники не стали выбумывать)

ЩАс попробую законнектиться

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Парни, может что-то не то делаю, но где смотреть вывод с данными ?В мониторе пусто , в консоли только отчёт о аплоаде:

Executable segment sizes:
ICACHE : 32768           - flash instruction cache 
IROM   : 246716          - code in flash         (default or ICACHE_FLASH_ATTR) 
IRAM   : 27369   / 32768 - code in IRAM          (IRAM_ATTR, ISRs...) 
DATA   : 1504  )         - initialized variables (global, static) in RAM/HEAP 
RODATA : 1384  ) / 81920 - constants             (global, static) in RAM/HEAP 
BSS    : 26104 )         - zeroed variables      (global, static) in RAM/HEAP 
Скетч использует 276973 байт (26%) памяти устройства. Всего доступно 1044464 байт.
Глобальные переменные используют 28992 байт (35%) динамической памяти, оставляя 52928 байт для локальных переменных. Максимум: 81920 байт.
esptool.py v3.0
Serial port COM5
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: c8:2b:96:08:f4:df
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 281120 bytes to 204942...
Writing at 0x00000000... (7 %)
Writing at 0x00004000... (15 %)
Writing at 0x00008000... (23 %)
Writing at 0x0000c000... (30 %)
Writing at 0x00010000... (38 %)
Writing at 0x00014000... (46 %)
Writing at 0x00018000... (53 %)
Writing at 0x0001c000... (61 %)
Writing at 0x00020000... (69 %)
Writing at 0x00024000... (76 %)
Writing at 0x00028000... (84 %)
Writing at 0x0002c000... (92 %)
Writing at 0x00030000... (100 %)
Wrote 281120 bytes (204942 compressed) at 0x00000000 in 18.3 seconds (effective 123.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

открыть монитор порта после загрузки, нажать кнопку RESET

grigory.dm
Offline
Зарегистрирован: 05.11.2021
Вот такое выдал по 1 , насколько я понимаю, sealed это нестандартные ключи, где их откопать?
Еще не FullChargeCapacity: 32 mAh настроживает, видимо это старый стейт от ботареи до замены мертвых аккумов:
 
Pack Info...
DesignCapacity: 4400 mAh
FullChargeCapacity: 32 mAh
CycleCount: 142
Date: 2009.9.17
DesignVoltage: 10800 mV
ManufName: SMP-SS22F
DeviceName: ZZ06047
SerialNumber: 0017 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 0 mV
DeviceChemistry: LION
Temperature: 21.50 C
Voltage: 11779 mV
Current: 0 mA
RelativeSOC: 100 %
AbsoluteSOC: 1 %
RemainingCapacity: 32 mAh
VCELL4: 0 mV
VCELL3: 4078 mV
VCELL2: 3773 mV
VCELL1: 3928 mV
SpecificationInfo: 0031 Hex
Battery Status: 4AC0 Hex
TCA|TDA|RCA|INIT|DSG|
Operation Status: E441 Hex
PRES|FAS|SS|LDMD|DSG|QEN|
Sealed
Device Type: 0750 Hex
Firmware Version: 0160 Hex
Hardware Version: 00A6 Hex
 
Пункты выполняются до 5 , но 6 падает в (у меня плата esp8266 node mcu, и с размером буфера вроде не должно быть проблем):
6. Clearing CycleCount.
7. Setting current date.
8. Writing DesignCapacity, QMAX, Update status, Ra_table.
9. Begin the Impedance Track algorithm.
Wire error - 3
 
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
 
Soft WDT reset
 
>>>stack>>>
 
ctx: cont
sp: 3ffffdc0 end: 3fffffc0 offset: 01a0
3fffff60:  00000017 00000003 3ffee838 40201048  
3fffff70:  3fffda36 00000000 3ffee6fc 40201116  
3fffff80:  3fffdad0 00000000 3ffee838 40202361  
3fffff90:  3fffdad0 00000000 3ffee88c 3ffee8a0  
3fffffa0:  3fffdad0 00000000 3ffee88c 40203304  
3fffffb0:  feefeffe feefeffe 3ffe85e0 40100db1  
<<<stack<<<
 
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
?)⸮
⸮1H⸮Arduino Smart Battery
Several utilities for working with TI bq20z... IC
Press Enter...
 

 

Hy6yk
Offline
Зарегистрирован: 14.06.2020
Добрый день, уважаемые!
Намедни внезапно умер аккумулятор от ноута Samsung, что и побудило его поковырять. Опишу свои приключения - может кому полезным будет.
 Умер аккум следующим образом - при стопроцентном заряде отключил от сетевого питания и работал от батареи, буквально пару минут поработал и ноут просто вырубился без каких либо предупреждений и включаться не желал. При подключении сетевого питания ноут начинал работать, в трее значок батарее показывал уровень заряда 94%, "подключена, не заряжается". Отключение от сети приводило к мгновенному отрубанию ноута, как будто батареи и не было.
Коллега с работы отдал контроллер от такого же аккумулятора, уже выпаянный, но только немного постарее (ревизия его аккумулятора 1.0, моего 1.2), типа может получится из двух один собрать.
 
Итак имеем: аккумулятор Samsung, ID: AA-PB9NC6B, на 11,1V и 4400 mAh
Распиновку гребёнки в инете не нашёл, она на 7 контактов. Прозвонкой удалось выяснить - крайние с обеих сторон это сдвоенные + и -, по информации из инетов так же стало понятно, что ближайший к минусу это контакт указывающий на то, что батарея вставлена в ноут, не знаю как точно называется контакт, где-то в инете проскакивало BAT_IN, пусть будет такой. Оставшиеся два это как раз необходимые SDA и SCL. Ниже картинка с полученной распиновкой.
При подключении ардуинки по схеме с первой страницы этой ветки, контроллер не отвечал (для таких "специалистов" как я - для arduino nano SDA это вывод А4, SCL - А5). Причём не отвечал ни мой, ни тот который коллега отдал (к нему я подключил три банки лития, от плюса к минусу - как где-то советовали). Чип на обоих контроллерах одинаковый - bq20z453. Запустить свой контроллер (ревизия 1.2) удалось кратковременным подключением + с крайней банки на + гребёнки. А контроллер коллеги (ревизия 1.0), кратковременным подключением GND на BAT_IN. 
 
Ну а теперь результаты:
Свой контроллер удалось оживить и последовательность 1,2,3,4,5,6,7,8,1,2,3,4,9 отработала корректно. Ноут аккум видит, заряжает, но при отключении от сети проходит немного времени и ноут вырубается без предупреждений. Последующее включение сетевого адаптера опять всё нормализует - видит, заряжает. Тут я думаю одна банка умирает похоже, потому что на ней напряжение ниже чем на остальных двух на 4 десятых вольта. Надо подключить вольтметр и посмотреть как падает напряжение на ней. Но странно почему, в винде не отображается снижение процентов заряда аккумулятора? Вернее оно конечно есть, но плавное снижение до около 78% и затем выключение. На сколько я понимаю проценты должны быстро падать и только потом отрубаться. Но это ладно, тут я ещё поковыряю.
Меня больше интересует вот что - на контроллере коллеги с 1 по 5 отрабатывает, дальше Wire error-3. Если сделать с 1 по 5 затем опять 1, то статус остаётся Sealed. Я так понял что здесь нестандартные ключи. Потому что на моём контроллере Sealed поменялся на Unsealed.
Ну и вопрос к Komandir-у: можно победить этот контроллер? Вы ранее писали чтоб обратились к Вам при подобных ситуациях. Сможете помочь? Повторюсь - чип bq20z453
 
Hy6yk
Offline
Зарегистрирован: 14.06.2020

grigory.dm пишет:

Вот такое выдал по 1 , насколько я понимаю, sealed это нестандартные ключи, где их откопать?

Тут я не специалист, просто как я понял - если после п.1 пишет Sealed, это ещё не значит что ключи не стандартные. Если после 1,2,3,4,5 опять сделать 1 и остаётся Sealed, то тогда нестандартные.

Как я понял Вы как раз делали с 1 по 5. Так что у Вас не стандартные. У меня такая же проблема.

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Сomandir помоги пожалуйста, вроде выше кому эту проблему решили

Komandir
Offline
Зарегистрирован: 18.08.2018

grigory.dm после 3 4 что в первом что про состояние Sealed/Unsealed ?

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Komandir пишет:

grigory.dm после 3 4 что в первом что про состояние Sealed/Unsealed ?

После 3:

Operation Status: E441 Hex
PRES|FAS|SS|LDMD|DSG|QEN|
Sealed
50,07,D4,D4
 
 
после 4:
Operation Status: E441 Hex
PRES|FAS|SS|LDMD|DSG|QEN|
Sealed
50,07,D4,D4
 
Чип bq20z75, ноут HP
 

 

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Komandir пишет:

Мне было лень менять банки на резисторы - и меня не доставали TCA TDA.

Резисторы нужны что бы RemainCapacity был 0 и можно было делать сброс пароля обходным путем.

Но если батарея ещё дышит - RemainCapacity=0 можно получить нагрузив батарею лампой или мощными резисторами.

До нуля нагрузить может?

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Komandir пишет:

Sealed - У Вас ключи не дефолтные !

Можем испытать "раскуренный" алгоритм, если Вы готовы.

Komandir, можете уточнить про это?у меня как раз такая история

Andrey_2000
Offline
Зарегистрирован: 15.11.2021

Батарея на контроллере BQ30Z55, после отсоединения и подсоединения обратно банок, запустил скетч для ESP8266, без ошибок выполнялись пункты 1,2,3,4,5 и 9. Батарея после установки в ноутбук заработала. Решил перепаять провода и опять отключил банки, теперь после установки сбросились на 0 FullChargeCapacity, RemainingCapacity и AbsoluteSOC. Запись в первые два параметра заканчивается ошибкой. Похоже не удается войти в Unseal или Full Access Mode. 

Использую ключи

#define unseal_key_1 0x0414

#define unseal_key_2 0x3672

#define full_access_key_1 0xFFFF
#define full_access_key_2 0xFFFF
#define pf_clear_key_1 0x2673
#define pf_clear_key_2 0x1712.
Самое главное не понятно, почему первый раз при отсоединении банок удалось запустить батарею, а во второй раз не получается.
Komandir
Offline
Зарегистрирован: 18.08.2018

Andrey_2000 BQ30Z55 - это совсем другой контроллер !!!

grigory.dm в том случае не все получилось ... можем у вас попробовать

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Komandir пишет:

Andrey_2000 BQ30Z55 - это совсем другой контроллер !!!

grigory.dm в том случае не все получилось ... можем у вас попробовать

Там сгорело или просто не получилось?)

Так то готов.

У меня еще вопрос, нельзя ли на ардуино написать прокси для доступа по I2C программы be2works?в том проекте кажется решен вопрос с обходом блокировки.

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Komandir пишет:

grigory.dm в том случае не все получилось ... можем у вас попробовать

Komandir можно и мне поучаствовать в этом мероприятии? 

Komandir
Offline
Зарегистрирован: 18.08.2018

grigory.dm ничего не сгорело, но и блокировка не снялась. Там был чип с прошивкой не от TI видимо.

Komandir
Offline
Зарегистрирован: 18.08.2018

Для теста надо разрядить до RemainingCapacity = 0 (или резисторы вместо банок + внешнее питание).

Ну и доступ через Anydesk или TeamViewer ...

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Резисторы - какое сопротивление? мощность?

Внешнее питание - какое напряжение? куда цеплять?

Komandir
Offline
Зарегистрирован: 18.08.2018

Все берут резисторы по 470 ом и источник 9 - 10 вольт (включать на крайние - и + сборки)

Hy6yk я нигде не видел что у вас по 1 выдаёт - может там и так RemainingCapacity = 0

Komandir
Offline
Зарегистрирован: 18.08.2018

grigory.dm пишет:

У меня еще вопрос, нельзя ли на ардуино написать прокси для доступа по I2C программы be2works?в том проекте кажется решен вопрос с обходом блокировки.

Видел что вроде кто то сделал для stm32, но я не пользовал и код не открытый

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Komandir пишет:

Hy6yk я нигде не видел что у вас по 1 выдаёт - может там и так RemainingCapacity = 0

Писал RemainingCapacity: 1139 mAh.

Но это когда я цеплял живые банки. Правильно ли я понимаю, что можно подпаять три дохлые 18650 у которых напряжение 0 вольт или близкое к тому?

Ниже вся информация которая выдавалась по 1

Pack Info...
DesignCapacity: 4400 mAh
FullChargeCapacity: 1841 mAh
CycleCount: 206
Date: 2012.2.23
DesignVoltage: 11100 mV
ManufName: Celx
DeviceName: 4206L44
SerialNumber: 0410 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 0 mV
DeviceChemistry: LION
Temperature: 26.70 C
Voltage: 11226 mV
Current: 0 mA
RelativeSOC: 62 %
AbsoluteSOC: 26 %
RemainingCapacity: 1139 mAh
VCELL4: 0 mV
VCELL3: 3744 mV
VCELL2: 3722 mV
VCELL1: 3760 mV
SpecificationInfo: 0031 Hex
Battery Status: 48C0 Hex
TCA|TDA|INIT|DSG|
Operation Status: E445 Hex
PRES|FAS|SS|LDMD|DSG|R_DIS|QEN|
Sealed
Device Type: 0453 Hex
Firmware Version: 0011 Hex
Hardware Version: 00A6 Hex

 

Komandir
Offline
Зарегистрирован: 18.08.2018

Можно и с этими - разрядите батарею через автомобильную лампочку до ~3 вольт на банку

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Komandir, Всё, удалось добиться RemainingCapacity: 0 mAh. Как можно связаться с Вами? на почту__ скиньте контакт. Там договоримся о времени. Вы кстати в каком часовом поясе живёте?

Komandir
Offline
Зарегистрирован: 18.08.2018

nubuc@YANDEX.ru и nubuk@YANDEX.ru не приняли почту

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Для интересующихся: Фокус не удался. Контроллер аккумулятора Samsung (Rev 1.0) на чипе bq20z453 дистанционно разлочить не удалось. 

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Hy6yk пишет:

Для интересующихся: Фокус не удался. Контроллер аккумулятора Samsung (Rev 1.0) на чипе bq20z453 дистанционно разлочить не удалось. 

Я так понимаю, ждём следующих попыток?)

Comandir, есть желание попробовать на bq20z75 от HP или сначала нужно проанализировать что не так? 

Komandir
Offline
Зарегистрирован: 18.08.2018

Проверить можно. Если бы у меня были платы для статистики, то может родился бы и общий алгоритм ... На моих 2 платах работает.

Hy6yk
Offline
Зарегистрирован: 14.06.2020

grigory.dm пишет:

Я так понимаю, ждём следующих попыток?)

Я-то сам врятли осилю)) Такие слова как "сниферить" для меня в диковинку)) Может на досуге и попробую разобрать что к чему, но иллюзий особых не питаю.

Как я понял: У Komandir-а был отработанный на другом чипе алгоритм по вытаскиванию ключа. Конкретно мой чип (с тремя знаками после буквы Z) под этот алгоритм не подошёл. Чтобы разобраться необходимо через отдельную софтину подключаться, смотреть что чип шлёт в ответ на определённые команды, анализировать и пытаться вытянут от-туда ключ.  Как я уже сказал - для меня это практически тёмный лес. А делать это удалённо - это тоже так себе занятие ))

Возможно в Вашем случае всё по другому - у Вас вон и чип двузначный))

 

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Hy6yk пишет:

grigory.dm пишет:

Я так понимаю, ждём следующих попыток?)

Я-то сам врятли осилю)) Такие слова как "сниферить" для меня в диковинку)) Может на досуге и попробую разобрать что к чему, но иллюзий особых не питаю.

Как я понял: У Komandir-а был отработанный на другом чипе алгоритм по вытаскиванию ключа. Конкретно мой чип (с тремя знаками после буквы Z) под этот алгоритм не подошёл. Чтобы разобраться необходимо через отдельную софтину подключаться, смотреть что чип шлёт в ответ на определённые команды, анализировать и пытаться вытянут от-туда ключ.  Как я уже сказал - для меня это практически тёмный лес. А делать это удалённо - это тоже так себе занятие ))

Возможно в Вашем случае всё по другому - у Вас вон и чип двузначный))

 

А не wireshark-ком ли сниферили и куда потом подставляли ключи, есть наводка?

ps. Сниферил я раньше много, но в телефонии.Похоже, тут подобное),дайте наводку

 

grigory.dm
Offline
Зарегистрирован: 05.11.2021

Komandir пишет:

Проверить можно. Если бы у меня были платы для статистики, то может родился бы и общий алгоритм ... На моих 2 платах работает.

на каких платах работает?

Komandir
Offline
Зарегистрирован: 18.08.2018

Снифер это что то типа Saleae Logic

Я сохранил весь протокол обмена по i2c между be2works и bq20z955 в момент снятия разлочки.

Разобрался что к чему и повторил на ардуино. У меня сейчас две платы bq20z955 и на обеих это срабатывает.

Device Type: 0955 Hex
Firmware Version: 0302 Hex
Hardware Version: 00A6 Hex