cmd[0] = 0xEE
ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
- utime.sleep_ms(100)
+ utime.sleep_ms(250)
retrycnt = 51
for i in range (retrycnt):
if r_data[0] == 0x55:
print("r_data[0] = 0x55,break")
break
-
+ i2c_obj = I2C(I2C.I2C2, I2C.STANDARD_MODE)
+ print("cst816d_update try:count:{}!!!".format(i))
+ # ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
+ # utime.sleep_ms(5)
+
+ # ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
+
+ # utime.sleep_ms(5)
+
+ # cmd[0] = 0xEE
+ # ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
+
+ utime.sleep_ms(5)
startAddr = startAddr + PER_LEN
del data[0:PER_LEN]
sum_len = sum_len + PER_LEN
+++ /dev/null
-import log
-from machine import I2C
-import utime
-from machine import Pin
-import uos
-
-# from ext import capacitive_hynitron_cst816d_update_new
-import capacitive_hynitron_cst816d_update
-
-TP_HYN_I2C_UPDATE_WRITE_ADDR = (0x6A<<1)
-TP_HYN_I2C_UPDATE_READ_ADDR = ((0x6A<<1)|1)
-PER_LEN = 512
-x = 0
-y = 0
-#---------------------------------------------------------------------
-# cst816d_read_checksum
-#---------------------------------------------------------------------
-def cst816d_read_checksum():
-
- if -1 == cst816d_enter_bootmode():
- return -1
-
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
- cmd = [0]
-
- if -1 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x03]), 2, bytearray(cmd), 1):
- return -1
- utime.sleep_ms(500)#这里延时太短会读错checksum
-
- r_data = bytearray(2)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x08]), 2, r_data, 2, 0):
- return -1
- check_sum = (r_data[1] << 8) | r_data[0]
- print("check_sum的值为:",check_sum)
- return check_sum
-#---------------------------------------------------------------------
-# GPIO_ResetTP
-#---------------------------------------------------------------------
-def GPIO_ResetTP():
-
- print("GPIO_ResetTP")
-
- gpio_power = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_PU, 0)
- gpio_power.write(1)
-
- gpio_reset = Pin(Pin.GPIO32, Pin.OUT, Pin.PULL_PU, 0)
- gpio_reset.write(0)
- utime.sleep_ms(10)
- gpio_reset.write(1)
- utime.sleep_ms(10)
-
-#---------------------------------------------------------------------
-# cst816d_update
-#---------------------------------------------------------------------
-def cst816d_update(startAddr, length, data):
- print("cst816d_update")
- if -1 == cst816d_enter_bootmode():
- return -1
-
- sum_len = 0
- cmd = [0,0]
- global x
- while 1:
- x += 1
- if sum_len >= length:
- print("sum_len >= length,退出循环")
- return
- a = startAddr&0xFF
- cmd[0]=a
- b = startAddr>>8
- cmd[1]=b
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
- utime.sleep_ms(100)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
-
- utime.sleep_ms(100)
-
- cmd[0] = 0xEE
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
-
- utime.sleep_ms(100)
-
- retrycnt = 51
- for i in range (retrycnt):
- r_data = bytearray(1)
- ret = i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x05]), 2, r_data, 1, 0)
- utime.sleep_ms(50)
-
- if r_data[0] == 0x55:
- print("r_data[0] = 0x55,break")
- break
-
- startAddr = startAddr + PER_LEN
- del data[0:PER_LEN]
- sum_len = sum_len + PER_LEN
-
-#---------------------------------------------------------------------
-# cst816d_enter_bootmode
-#---------------------------------------------------------------------
-def cst816d_enter_bootmode():
-
- GPIO_ResetTP()
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- cmd = [0xAB]
- #进入boot模式
- retrycnt = 10
- global y
- for i in range (retrycnt):
- y += 1
- if 0 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x01]), 2, bytearray(cmd), 1):
- utime.sleep_ms(100)
- else:
- print("boot模式写命令失败")
-
- r_data = bytearray(1)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x03]), 2, r_data, 1, 0):
- utime.sleep_ms(100)
- else:
- if 0xc1 == r_data[0]:
- utime.sleep_ms(100)
- return 0
- else:
- print("boot模式进入失败")
-
- return -1
-#---------------------------------------------------------------------
-# ctp_hynitron_update
-#---------------------------------------------------------------------
-def ctp_hynitron_update():
-
- # 初始化固件数组和数组长度
- p_app_bin = []
- app_bin_len = 0
-
- #进入boot模式
- # if -1 == cst816d_enter_bootmode():
- # return
-
- # 获取固件数组
- # p_app_bin = capacitive_hynitron_cst816d_update_new.app_bin_816d
- p_app_bin = capacitive_hynitron_cst816d_update.app_bin_816d
-
- # 获取固件数组的长度
- app_bin_len = len(p_app_bin)
-
- if app_bin_len > 10:
- startAddr = p_app_bin[1]
- length = p_app_bin[3]
- checksum = p_app_bin[5] #a8 78
-
- startAddr <<= 8; startAddr |= p_app_bin[0]
- length <<= 8; length |= p_app_bin[2]
- checksum <<= 8; checksum |= p_app_bin[4]
-
- print("startAddr:%x"%startAddr)
- print("length:%x"%length)
- print("checksum:%x"%checksum)
-
-
- #检查checksum
- sum_now = cst816d_read_checksum()
- if sum_now == -1:
- print("初始化失败")
- elif sum_now != checksum:
- print("固件包checksum不相同!")
-
- del p_app_bin[0:6]
- cst816d_update(startAddr, length, p_app_bin)
-
- #升级后再次确认checksum
- if checksum == cst816d_read_checksum():
- print("固件升级成功!")
-
- elif checksum == sum_now:
- print("固件包checksum相同,退出")
-
-
-#---------------------------------------------------------------------
-# HYN_Initial
-#---------------------------------------------------------------------
-def HYN_Initial():
-
- #GPIO_ResetTP()
-
- ctp_hynitron_update()
-
- GPIO_ResetTP()
-
-
-
-
-
-
+++ /dev/null
-import log
-from machine import I2C
-import utime
-from machine import Pin
-import uos
-
-# from ext import capacitive_hynitron_cst816d_update_new
-import capacitive_hynitron_cst816d_update
-
-TP_HYN_I2C_UPDATE_WRITE_ADDR = (0x6A<<1)
-TP_HYN_I2C_UPDATE_READ_ADDR = ((0x6A<<1)|1)
-PER_LEN = 512
-x = 0
-y = 0
-#---------------------------------------------------------------------
-# cst816d_read_checksum
-#---------------------------------------------------------------------
-def cst816d_read_checksum():
-
- if -1 == cst816d_enter_bootmode():
- return -1
-
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
- cmd = [0]
-
- if -1 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x03]), 2, bytearray(cmd), 1):
- return -1
- utime.sleep_ms(500)#这里延时太短会读错checksum
-
- r_data = bytearray(2)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x08]), 2, r_data, 2, 0):
- return -1
- check_sum = (r_data[1] << 8) | r_data[0]
- print("check_sum的值为:",check_sum)
- return check_sum
-#---------------------------------------------------------------------
-# GPIO_ResetTP
-#---------------------------------------------------------------------
-def GPIO_ResetTP():
-
- print("GPIO_ResetTP")
-
- gpio_power = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_PU, 0)
- gpio_power.write(1)
-
- gpio_reset = Pin(Pin.GPIO32, Pin.OUT, Pin.PULL_PU, 0)
- gpio_reset.write(0)
- utime.sleep_ms(10)
- gpio_reset.write(1)
- utime.sleep_ms(10)
-
-#---------------------------------------------------------------------
-# cst816d_update
-#---------------------------------------------------------------------
-def cst816d_update(startAddr, length, data):
- print("cst816d_update")
- if -1 == cst816d_enter_bootmode():
- return -1
-
- sum_len = 0
- cmd = [0,0]
- global x
- while 1:
- x += 1
- if sum_len >= length:
- print("sum_len >= length,退出循环")
- return
- a = startAddr&0xFF
- cmd[0]=a
- b = startAddr>>8
- cmd[1]=b
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
- utime.sleep_ms(100)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
-
- utime.sleep_ms(100)
-
- cmd[0] = 0xEE
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
-
- utime.sleep_ms(100)
-
- retrycnt = 51
- for i in range (retrycnt):
- r_data = bytearray(1)
- ret = i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x05]), 2, r_data, 1, 0)
- utime.sleep_ms(50)
-
- if r_data[0] == 0x55:
- print("r_data[0] = 0x55,break")
- break
-
- startAddr = startAddr + PER_LEN
- del data[0:PER_LEN]
- sum_len = sum_len + PER_LEN
-
-#---------------------------------------------------------------------
-# cst816d_enter_bootmode
-#---------------------------------------------------------------------
-def cst816d_enter_bootmode():
-
- GPIO_ResetTP()
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- cmd = [0xAB]
- #进入boot模式
- retrycnt = 10
- global y
- for i in range (retrycnt):
- y += 1
- if 0 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x01]), 2, bytearray(cmd), 1):
- utime.sleep_ms(100)
- else:
- print("boot模式写命令失败")
-
- r_data = bytearray(1)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x03]), 2, r_data, 1, 0):
- utime.sleep_ms(100)
- else:
- if 0xc1 == r_data[0]:
- utime.sleep_ms(100)
- return 0
- else:
- print("boot模式进入失败")
-
- return -1
-#---------------------------------------------------------------------
-# ctp_hynitron_update
-#---------------------------------------------------------------------
-def ctp_hynitron_update():
-
- # 初始化固件数组和数组长度
- p_app_bin = []
- app_bin_len = 0
-
- #进入boot模式
- # if -1 == cst816d_enter_bootmode():
- # return
-
- # 获取固件数组
- # p_app_bin = capacitive_hynitron_cst816d_update_new.app_bin_816d
- p_app_bin = capacitive_hynitron_cst816d_update.app_bin_816d
-
- # 获取固件数组的长度
- app_bin_len = len(p_app_bin)
-
- if app_bin_len > 10:
- startAddr = p_app_bin[1]
- length = p_app_bin[3]
- checksum = p_app_bin[5] #a8 78
-
- startAddr <<= 8; startAddr |= p_app_bin[0]
- length <<= 8; length |= p_app_bin[2]
- checksum <<= 8; checksum |= p_app_bin[4]
-
- print("startAddr:%x"%startAddr)
- print("length:%x"%length)
- print("checksum:%x"%checksum)
-
-
- #检查checksum
- sum_now = cst816d_read_checksum()
- if sum_now == -1:
- print("初始化失败")
- elif sum_now != checksum:
- print("固件包checksum不相同!")
-
- del p_app_bin[0:6]
- cst816d_update(startAddr, length, p_app_bin)
-
- #升级后再次确认checksum
- if checksum == cst816d_read_checksum():
- print("固件升级成功!")
-
- elif checksum == sum_now:
- print("固件包checksum相同,退出")
-
-
-#---------------------------------------------------------------------
-# HYN_Initial
-#---------------------------------------------------------------------
-def HYN_Initial():
-
- #GPIO_ResetTP()
-
- ctp_hynitron_update()
-
- GPIO_ResetTP()
-
-
-
-
-
-
+++ /dev/null
-import log
-from machine import I2C
-import utime
-from machine import Pin
-import uos
-
-# from ext import capacitive_hynitron_cst816d_update_new
-import capacitive_hynitron_cst816d_update
-
-TP_HYN_I2C_UPDATE_WRITE_ADDR = (0x6A<<1)
-TP_HYN_I2C_UPDATE_READ_ADDR = ((0x6A<<1)|1)
-PER_LEN = 512
-x = 0
-y = 0
-#---------------------------------------------------------------------
-# cst816d_read_checksum
-#---------------------------------------------------------------------
-def cst816d_read_checksum():
-
- if -1 == cst816d_enter_bootmode():
- return -1
-
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
- cmd = [0]
-
- if -1 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x03]), 2, bytearray(cmd), 1):
- return -1
- utime.sleep_ms(500)#这里延时太短会读错checksum
-
- r_data = bytearray(2)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x08]), 2, r_data, 2, 0):
- return -1
- check_sum = (r_data[1] << 8) | r_data[0]
- print("check_sum的值为:",check_sum)
- return check_sum
-#---------------------------------------------------------------------
-# GPIO_ResetTP
-#---------------------------------------------------------------------
-def GPIO_ResetTP():
-
- print("GPIO_ResetTP")
-
- gpio_power = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_PU, 0)
- gpio_power.write(1)
-
- gpio_reset = Pin(Pin.GPIO32, Pin.OUT, Pin.PULL_PU, 0)
- gpio_reset.write(0)
- utime.sleep_ms(10)
- gpio_reset.write(1)
- utime.sleep_ms(10)
-
-#---------------------------------------------------------------------
-# cst816d_update
-#---------------------------------------------------------------------
-def cst816d_update(startAddr, length, data):
- print("cst816d_update")
- if -1 == cst816d_enter_bootmode():
- return -1
-
- sum_len = 0
- cmd = [0,0]
- global x
- while 1:
- x += 1
- if sum_len >= length:
- print("sum_len >= length,退出循环")
- return
- a = startAddr&0xFF
- cmd[0]=a
- b = startAddr>>8
- cmd[1]=b
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
- utime.sleep_ms(100)
-
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
-
- utime.sleep_ms(100)
-
- cmd[0] = 0xEE
- ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
-
- utime.sleep_ms(100)
-
- retrycnt = 51
- for i in range (retrycnt):
- r_data = bytearray(1)
- ret = i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x05]), 2, r_data, 1, 0)
- utime.sleep_ms(50)
-
- if r_data[0] == 0x55:
- print("r_data[0] = 0x55,break")
- break
-
- startAddr = startAddr + PER_LEN
- del data[0:PER_LEN]
- sum_len = sum_len + PER_LEN
-
-#---------------------------------------------------------------------
-# cst816d_enter_bootmode
-#---------------------------------------------------------------------
-def cst816d_enter_bootmode():
-
- GPIO_ResetTP()
- i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
- cmd = [0xAB]
- #进入boot模式
- retrycnt = 10
- global y
- for i in range (retrycnt):
- y += 1
- if 0 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x01]), 2, bytearray(cmd), 1):
- utime.sleep_ms(100)
- else:
- print("boot模式写命令失败")
-
- r_data = bytearray(1)
- if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x03]), 2, r_data, 1, 0):
- utime.sleep_ms(100)
- else:
- if 0xc1 == r_data[0]:
- utime.sleep_ms(100)
- return 0
- else:
- print("boot模式进入失败")
-
- return -1
-#---------------------------------------------------------------------
-# ctp_hynitron_update
-#---------------------------------------------------------------------
-def ctp_hynitron_update():
-
- # 初始化固件数组和数组长度
- p_app_bin = []
- app_bin_len = 0
-
- #进入boot模式
- # if -1 == cst816d_enter_bootmode():
- # return
-
- # 获取固件数组
- # p_app_bin = capacitive_hynitron_cst816d_update_new.app_bin_816d
- p_app_bin = capacitive_hynitron_cst816d_update.app_bin_816d
-
- # 获取固件数组的长度
- app_bin_len = len(p_app_bin)
-
- if app_bin_len > 10:
- startAddr = p_app_bin[1]
- length = p_app_bin[3]
- checksum = p_app_bin[5] #a8 78
-
- startAddr <<= 8; startAddr |= p_app_bin[0]
- length <<= 8; length |= p_app_bin[2]
- checksum <<= 8; checksum |= p_app_bin[4]
-
- print("startAddr:%x"%startAddr)
- print("length:%x"%length)
- print("checksum:%x"%checksum)
-
-
- #检查checksum
- sum_now = cst816d_read_checksum()
- if sum_now == -1:
- print("初始化失败")
- elif sum_now != checksum:
- print("固件包checksum不相同!")
-
- del p_app_bin[0:6]
- cst816d_update(startAddr, length, p_app_bin)
-
- #升级后再次确认checksum
- if checksum == cst816d_read_checksum():
- print("固件升级成功!")
-
- elif checksum == sum_now:
- print("固件包checksum相同,退出")
-
-
-#---------------------------------------------------------------------
-# HYN_Initial
-#---------------------------------------------------------------------
-def HYN_Initial():
-
- #GPIO_ResetTP()
-
- ctp_hynitron_update()
-
- GPIO_ResetTP()
-
-
-
-
-
-