Other Parts Discussed in Thread: BQSTUDIO
Tool/software:
We want to update the OTP registers of FCC, DCap and Battery low% . We have followed the steps mentioned in 6.1 Data Memory Parameter Update Example in TRM of the BQ27220 Ic. the values its showing is 0x00 and even after changing the battery id accordingly their was no impact. Can you tell us the proper steps to follow. We are using the below script to write in it.
#!/bin/bash echo "Reading 0x3a/3b Reg..." sleep 1 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 1 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at register address 0x3a: $value_3a" echo "Value at register address 0x3b: $value_3b" operation_status=$(i2cget -y 0 0x55 0x3a) SEC1=$(($operation_status >> 2 & 1)) SEC0=$(($operation_status >> 1 & 1)) #if already in Unseal if [ $SEC1 -eq 1 ] && [ $SEC0 -eq 0 ]; then echo "Device already in UNSEAL IF BLOCK" echo "Reading 0x3a/3b Reg..." sleep 1 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 1 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at register address 0x3a: $value_3a" echo "Value at register address 0x3b: $value_3b" elif [ $SEC1 -eq 0 ] && [ $SEC0 -eq 1 ]; then echo "Device already in FULL ACCESS ELSE IF BLOCK" sleep 1 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 1 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at FA 0x3a: $value_3a" echo "Value at FA 0x3b: $value_3b" else echo "STEP 1" echo "Sending UNSEAL command...ELSE BLOCK" i2cset -y 0 0x55 0x00 0x14 b sleep 2 i2cset -y 0 0x55 0x01 0x04 b sleep 2 i2cset -y 0 0x55 0x00 0x72 b sleep 2 i2cset -y 0 0x55 0x01 0x36 b sleep 2 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 1 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at US 0x3a: $value_3a" echo "Value at US 0x3b: $value_3b" fi echo "STEP 2" echo "Getting FULL ACCESS..." i2cset -y 0 0x55 0x00 0xFF b sleep 1 i2cset -y 0 0x55 0x01 0xFF b sleep 1 i2cset -y 0 0x55 0x00 0xFF b sleep 1 i2cset -y 0 0x55 0x01 0xFF b sleep 1 echo "Reading Operation Status" sleep 5 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 5 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at register address 0x3a: $value_3a" echo "Value at register address 0x3b: $value_3b" #### Entering into Config Update ##### echo "STEP 3" echo "Entering configuration update mode..." sleep 2 i2cset -y 0 0x55 0x00 0x90 b sleep 2 i2cset -y 0 0x55 0x01 0x00 b echo "STEP 4" #Polling OperationStatus register until bit 2 is set, with a try limit of 100 times #try=0 #max_try=100 echo "Polling OperationStatus register for CFGUPDATE bit2..." operation_status=$(i2cget -y 0 0x55 0x3b) while [ $((operation_status & 0x04)) -eq 0 ]; do echo "Waiting for config update...." sleep 2 # Add a sleep to avoid high CPU usage in the loop done echo "CFGUPDATE mode confirmed." sleep 3 echo "Reading Operation Status" sleep 5 value_3a=$(i2cget -y 0 0x55 0x3a b) sleep 5 value_3b=$(i2cget -y 0 0x55 0x3b b) echo "Value at register address 0x3a: $value_3a" echo "Value at register address 0x3b: $value_3b" operation_status=$(i2cget -y 0 0x55 0x3a) SEC1=$(($operation_status >> 2 & 1)) SEC0=$(($operation_status >> 1 & 1)) if [ $SEC1 -ne 0 ] && [ $SEC0 -ne 1 ];then echo "Getting FULL ACCESS..." i2cset -y 0 0x55 0x00 0xFF b sleep 5 i2cset -y 0 0x55 0x01 0xFF b sleep 5 i2cset -y 0 0x55 0x00 0xFF b sleep 2 i2cset -y 0 0x55 0x01 0xFF b sleep 2 else echo "Else" fi ###### Design Capacity ######## echo "STEP 5" echo "FCC OTP Update" i2cset -y 0 0x55 0x3e 0xe9 b sleep 1 i2cset -y 0 0x55 0x3f 0x40 b sleep 1 i2cset -y 0 0x55 0x40 0x17 b sleep 1 i2cset -y 0 0x55 0x41 0x70 b sleep 1 echo "Design capacity COMMAND END." echo "STEP 6" result=$(( (0xff - (0x40 + 0xe9 + 0x17 + 0x70)) & 0xff )) # Print the result printf "0x%x\n" $result echo "The output of checksum is : $result" echo "STEP 7" i2cset -y 0 0x55 0x60 $result sleep 2 i2cset -y 0 0x55 0x61 0x06 sleep 2 echo "STEP 8" i2cset -y 0 0x55 0x00 0x91 sleep 2 i2cset -y 0 0x55 0x01 0x00 sleep 2 echo "Exit config Update" i2cset -y 0 0x55 0x00 0x14 b sleep 1 i2cset -y 0 0x55 0x01 0x04 b sleep 1 i2cset -y 0 0x55 0x00 0x72 b sleep 1 i2cset -y 0 0x55 0x01 0x36 b sleep 1 echo "UNSEAL process completed."
We have also tried changing the battery id according to 8.3.2 Using ot.fs file but to no avail.