ソースを参照

用read命令才能进入update mode,S8XX固件里面这样写的
Clear Back Door的0x55标志,改为只读写一次判断
升级前不需要复位Touch IC了,进入Update mode的时候,S8XX固件会复位Touch IC

robbin 1 年間 前
コミット
a81b598e0b

+ 1 - 1
app/build.gradle

@@ -14,7 +14,7 @@ android {
         variant ->
             variant.outputs.all{
                 //此处指定生成的apk文件名
-                outputFileName = "WingCoolAPK_V3.0.3_20230515_debug.apk"
+                outputFileName = "WingCoolAPK_V3.0.3_20230516_debug.apk"
             }
     }
     lintOptions {

+ 41 - 50
app/src/main/java/com/example/administrator/wingcool_gt9_apk/FirmwareUpdate.java

@@ -533,7 +533,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 */
                 {
 
-                    iicRead32Bits((byte)0x01, (byte)0x00, (byte)0x14, mBytes, 23);
+                    iicRead32Bits((byte)0x01, (byte)0x00, (byte)0x14, (byte)0x0f,mBytes, 23);
 
                     for (int i = 10; i < 15; i++)  //Get PID
                     {
@@ -968,11 +968,11 @@ public class FirmwareUpdate extends AppCompatActivity
     }
 
     //发送命令,使得S8xx可以通过IIC向GT29xx的固定地址读取任意bytes的数据
-    private boolean iicRead32Bits(byte addrfirstbyte,byte addrsecondbyte,byte addrthirdbyte,byte[] wBuffer,int length) {
+    private boolean iicRead32Bits(byte addrfirstbyte,byte addrsecondbyte,byte addrthirdbyte,byte subCommand,byte[] wBuffer,int length) {
 
         int i;
 
-        iicByteData[1] = 0x0f; //7bit:0-read,1-write;other:command
+        iicByteData[1] = (byte)(0 | subCommand);//0x0f; //7bit:0-read,1-write;other:command
         //iicByteData[2] = 0x0f; //no command
         iicByteData[2] = addrfirstbyte;
         iicByteData[3] = addrsecondbyte;
@@ -1332,7 +1332,7 @@ public class FirmwareUpdate extends AppCompatActivity
 
         //if(false)
         {
-            if (!iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, pbBuf, length))
+            if (!iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, pbBuf, length))
             //if (!iicRead(addressHigh, addressLow, pbBuf, length))
             {
                 //FwUpdateMessage(L"recall i2c error failed", MSG_ERR);
@@ -2776,11 +2776,13 @@ public class FirmwareUpdate extends AppCompatActivity
             return false;
         }
 
+        SystemClock.sleep(10);
+
         msubcommand = (byte)0x24;  //最高位置1,写命令36 GTXXX_ENTER_UPDATE_MODE
 
         for (int i = 0; i < 10; i++)
         {
-            ret = IicWriteOneByte(addrfirstbyte, addrsecondbyte, addrthirdbyte, msubcommand, mdata);
+            ret = iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, msubcommand,mBytes, 1);  //用read命令才能进入update mode,固件里面这样写的
             if (ret) break;
         }
 
@@ -2805,7 +2807,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 //iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,byte[] wBuffer, 0, 1);
                 SystemClock.sleep(20);
                 //if (0xFF == gpI2C1->I2CByteRead(0xD807))
-                iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,mBytes, 1);
+                iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,msubcommand,mBytes, 1);
                 if ((byte)0xFF == mBytes[0])
                 {
                     addrfirstbyte = (byte)0x00;
@@ -2920,53 +2922,40 @@ public class FirmwareUpdate extends AppCompatActivity
         //BYTE cmdClearBackDoor[10];
         //BYTE ReadBackCheck[10];
         //
-        for (int j = 0; j < 20; j++) {
-            for (int i = 0; i < 10; i++) {
-                mBytes[i] = (byte) 0x55;
-            }
 
-            //clear back door
-            //if (!gpI2C1->I2CWrite(BOOT_OPT_ADDR, cmdClearBackDoor, 8))
-            addrfirstbyte = 0x01;
-            addrsecondbyte = 0x00;
-            addrthirdbyte = 0x00;
-            if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 0, 8)) {
-                return false;
-            }
-            SystemClock.sleep(20);
+        for (int i = 0; i < 10; i++) {
+            mBytes[i] = (byte) 0x55;
+        }
 
-            //if (!recallCheck32Bits(addrfirstbyte,addrsecondbyte, addrthirdbyte, mBytes,0,8))
-            if (!iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 8))
-            //if (!gpI2C1->I2CRead(BOOT_OPT_ADDR, ReadBackCheck, 8))  //todo
-            {
-                //Update_log = "[FW update]Clear Back Door Fail!";
-                //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
-                return false;
-            }
-            //SystemClock.sleep(40);
-            int count;
-            for (count = 0; count < 8; count++) {
-                if (mBytes[count] != (byte) 0x55) {
-                    //Update_log = "[FW update]Clear Back Door Fail!";
-                    //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
-                    //return false;
-                    break;
-                }
-            }
+        //clear back door
+        //if (!gpI2C1->I2CWrite(BOOT_OPT_ADDR, cmdClearBackDoor, 8))
+        addrfirstbyte = 0x01;
+        addrsecondbyte = 0x00;
+        addrthirdbyte = 0x00;
+        if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 0, 8)) {
+            return false;
+        }
+        SystemClock.sleep(20);
 
-            if (count == 8){
-                //Update_log = "[FW update]Clear Back Door Fail!";
-                //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
-                //return false;
-                break;
+        //if (!recallCheck32Bits(addrfirstbyte,addrsecondbyte, addrthirdbyte, mBytes,0,8))
+        if (!iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mBytes, 8))
+        //if (!gpI2C1->I2CRead(BOOT_OPT_ADDR, ReadBackCheck, 8))  //todo
+        {
+            //Update_log = "[FW update]Clear Back Door Fail!";
+            //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
+            return false;
+        }
+        //SystemClock.sleep(40);
+        int count;
+        for (count = 0; count < 8; count++) {
+            if (mBytes[count] != (byte) 0x55) {
+                Update_log = "[FW update]Clear Back Door Fail!";
+                mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
+                return false;
+                //break;
             }
         }
 
-        //if (memcmp(cmdClearBackDoor, ReadBackCheck, 8) != 0)  //todo
-        //{
-        //    return false;
-        //}
-
         addrfirstbyte = (byte)0x00;
         addrsecondbyte = (byte)0xD8;
         addrthirdbyte = (byte)0x08;
@@ -2985,7 +2974,7 @@ public class FirmwareUpdate extends AppCompatActivity
         for (int i = 0; i < 200; i++)
         {
             //read buffer [0x01001E]
-            if (!iicRead32Bits((byte)0x01, (byte)0x00, (byte)0x1E, mBytes, 6))
+            if (!iicRead32Bits((byte)0x01, (byte)0x00, (byte)0x1E, (byte)0x0f, mBytes, 6))
             {
                 continue;
             }
@@ -3131,7 +3120,7 @@ public class FirmwareUpdate extends AppCompatActivity
 
                     SystemClock.sleep(30);
 
-                    iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 1);
+                    iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mBytes, 1);
                     //if (!gpI2C1->I2CCheckRegister(BLB_CMD_STATUS_ADDR, FLASH_CMD_W_STATUS_WRITE_OK))
                     if (mBytes[0] == (byte) 0xEE)
                     {
@@ -3160,7 +3149,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 {
                     SystemClock.sleep(30);
 
-                    iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 1);
+                    iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mBytes, 1);
                     //if (!gpI2C1->I2CCheckRegister(BLD_CMD_STATUS_ADDR, FLASH_CMD_W_STATUS_WRITE_OK))
                     if (mBytes[0] == (byte) 0xEE)
                     {
@@ -3332,6 +3321,7 @@ public class FirmwareUpdate extends AppCompatActivity
             return false;
         }
 
+        /*
         byte addrfirstbyte = (byte)0x01;
         byte addrsecondbyte = (byte)0x01;
         byte addrthirdbyte = (byte)0x74;
@@ -3346,6 +3336,7 @@ public class FirmwareUpdate extends AppCompatActivity
         }
 
         SystemClock.sleep(80);
+        */
 
         if (!UpdateInit())  //NO1
         {

+ 1 - 1
app/src/main/res/values-en/strings.xml

@@ -107,7 +107,7 @@
     <string name="companyaddr">Address:Room 2008, Chuangxingda Business Building, No.36 Liuxian 3rd Road, Baoan District, Shenzhen</string>
     <string name="telephonenum">Telephone:186 8896 1937</string>
     <string name="emailaddr">Email:max@wingcool.cn</string>
-    <string name="version">APK Version:v3.0.3_20230515-Debug Version</string>
+    <string name="version">APK Version:v3.0.3_20230516-Debug Version</string>
 
     <!-- other -->
     <string name="app_name">WingCoolAPK</string>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -107,7 +107,7 @@
     <string name="companyaddr">地址:深圳市宝安区留仙三路 36 号创兴达商务大厦 2008 室</string>
     <string name="telephonenum">电话:186 8896 1937</string>
     <string name="emailaddr">邮箱:max@wingcool.cn</string>
-    <string name="version">APK版本:v3.0.3_20230515-debug版本</string>
+    <string name="version">APK版本:v3.0.3_20230516-debug版本</string>
 
     <!-- other -->
     <string name="app_name">WingCoolAPK</string>