添加ftm选项 未实现

This commit is contained in:
ranchuan
2024-12-18 15:39:02 +08:00
parent 0b491bde89
commit 5133fcb0fd
3 changed files with 194 additions and 1 deletions

176
bin/factory_mode.py Normal file
View File

@@ -0,0 +1,176 @@
import os
import sys
import struct
from bin.log import mywrite
_CmdTable={
0x0001:'IOT_FTM_CMD_ID_PING',
0x0002:'IOT_FTM_CMD_ID_READ',
0x0003:'IOT_FTM_CMD_ID_WRITE',
0x0004:'IOT_FTM_CMD_ID_TX',
0x0005:'IOT_FTM_CMD_ID_RX',
0x0006:'IOT_FTM_CMD_ID_TONE',
0x0007:'IOT_FTM_CMD_ID_STS',
0x0008:'IOT_FTM_CMD_ID_SET',
0x0009:'IOT_FTM_CMD_ID_GET',
0x000a:'IOT_FTM_CMD_ID_SCAN',
0X000b:'IOT_FTM_CMD_ID_HWQCFG',
0X000c:'IOT_FTM_CMD_ID_PKTCFG',
0X000d:'IOT_FTM_CMD_ID_TESTCASE',
0X000e:'IOT_FTM_CMD_ID_MAC_RECE',
0X000f:'IOT_FTM_CMD_ID_MAC_RECE_SNIFFER',
0x0010:'IOT_FTM_CMD_ID_RINGCFG',
0x0011:'IOT_FTM_CMD_ID_SET_FILTERSEL',
0x0012:'IOT_FTM_CMD_ID_SET_FILTER',
0x0013:'IOT_FTM_CMD_ID_SET_RINGDIS',
0x0014:'IOT_FTM_CMD_ID_SNIFFERCFG',
0x0015:'IOT_FTM_CMD_ID_RX_MSG_SHOW',
0x0016:'IOT_FTM_CMD_ID_CMD_CFG',
0x0017:'IOT_FTM_CMD_ID_CRC_CFG',
0x0018:'IOT_FTM_CMD_ID_MAC_PING',
0x0019:'IOT_FTM_CMD_ID_SET_TEINID',
0x001A:'IOT_FTM_CMD_ID_CLEAR_COUNT',
0x001B:'IOT_FTM_CMD_ID_SEND_COUNT',
0x001C:'IOT_FTM_CMD_ID_TPUT_TEST',
0x001D:'IOT_FTM_CMD_ID_DIS_HWQ',
0x001E:'IOT_FTM_CMD_ID_LOAD_DATA',
0x001F:'IOT_FTM_CMD_ID_I2C_WRITE',
0x0020:'IOT_FTM_CMD_ID_I2C_READ',
0x0021:'IOT_FTM_CMD_ID_GPIO_OUT',
0x0022:'IOT_FTM_CMD_ID_GPIO_IN',
0x0023:'IOT_FTM_CMD_ID_UART_LOOPBACK',
0x0024:'IOT_FTM_CMD_ID_SPI_FLASH',
0x0025:'IOT_FTM_CMD_ID_READ_CHIPID',
0x0026:'IOT_FTM_CMD_ID_READ_FW_VER',
0x0027:'IOT_FTM_CMD_ID_BURN_MAC',
0x0028:'IOT_FTM_CMD_ID_SEND_REV_DATA',
0x0029:'IOT_FTM_CMD_ID_GOLDEN_REV_DATA',
0x002a:'IOT_FTM_CMD_ID_SET_PHY_PARA',
0x002b:'IOT_FTM_CMD_ID_READ_MAC',
0x002c:'IOT_FTM_CMD_ID_INIT_DONE',
0x002d:'IOT_FTM_CMD_ID_EFUSE_LOCK',
0x002e:'IOT_FTM_CMD_ID_SPUR_MASK_SET',
0x002f:'IOT_FTM_CMD_ID_OEM_MODULETYPE_SET',
0x0030:'IOT_FTM_CMD_ID_OEM_MODULETYPE_GET',
0x0031:'IOT_FTM_CMD_ID_VENDOR_ID_SET',
0x0032:'IOT_FTM_CMD_ID_CHIP_CODE_SET',
0x0033:'IOT_FTM_CMD_ID_CHIP_CODE_GET',
0x0034:'IOT_FTM_CMD_ID_SET_PPM_NID',
0x0035:'IOT_FTM_CMD_ID_GLB_NID_SET',
0x0036:'IOT_FTM_CMD_ID_CUS_CMD',
0x0037:'IOT_FTM_CMD_ID_VENDOR_ID_GET',
0x0038:'IOT_FTM_CMD_ID_CHIP_MMID_GET',
0x0039:'IOT_FTM_CMD_ID_ZC_CIRCUIT_CHECK',
0x003a:'IOT_FTM_CMD_ID_DISABEL_GPIO_RESET',
0x003b:'IOT_FTM_CMD_ID_DUT_CHARGE_VOL_GET',
0x003c:'IOT_FTM_CMD_ID_FW_CRC_CHECK',
0x003d:'IOT_FTM_CMD_ID_DEV_ID_SET',
0x003e:'IOT_FTM_CMD_ID_DEV_ID_GET',
0x003f:'IOT_FTM_CMD_ID_PT_FW_VER_GET',
0x0040:'IOT_FTM_CMD_ID_HW_VER_SET',
0x0041:'IOT_FTM_CMD_ID_HW_VER_GET',
0x0042:'IOT_FTM_CMD_ID_DUT_CHANNEL_VOL_GET',
0x0043:'IOT_FTM_CMD_ID_DUT_TXRX_MODE_SET',
0x0044:'IOT_FTM_CMD_ID_FLASH_ID_GET',
0x0045:'IOT_FTM_CMD_ID_MAC_ADDR_UPDATE',
0x0046:'IOT_FTM_CMD_ID_BURN_IP_INFO',
0x0047:'IOT_FTM_CMD_ID_READ_IP_INFO',
0x0048:'IOT_FTM_CMD_ID_CHIP_MMID_SET',
0x0049:'IOT_FTM_CMD_ID_CHECK_IMG_CRC',
0x004a:'IOT_FTM_CMD_ID_METER_CROSSTALK_SET',
0x004b:'IOT_FTM_CMD_ID_METER_CROSSTALK_GET',
0x004c:'IOT_FTM_CMD_ID_SOFT_RESTART',
0x004d:'IOT_FTM_CMD_ID_EM_EXT_FUNC',
0x004e:'IOT_FTM_CMD_ID_PASSCODE_GET',
0x004f:'IOT_FTM_CMD_ID_EXT_FLASH_CHECK',
0x0050:'IOT_FTM_CMD_ID_BRK_START_STOP_LOOPBACK',
0x0051:'IOT_FTM_CMD_ID_BRK_ENABLE_INT',
0x0052:'IOT_FTM_CMD_ID_BRK_QUERY_TRIGGER_CNT',
0x0053:'IOT_FTM_CMD_ID_READ_BCD_MAC',
0x0054:'IOT_FTM_CMD_ID_LOADER_TSFM',
0x0055:'IOT_FTM_CMD_ID_CHANNEL_ADC_READ',
0x0056:'IOT_FTM_CMD_ID_METER_PORT_UART_LOOPBACK',
0x0057:'IOT_FTM_CMD_ID_SET_PT_FW_VER',
0x0058:'IOT_FTM_CMD_ID_TEMP_CALI_SET',
0x0059:'IOT_FTM_CMD_ID_TEMP_CALI_GET',
0x005A:'IOT_FTM_CMD_ID_MAC_PHY_DIAGNOSTIC',
0x005B:'IOT_FTM_CMD_ID_ADC_CALI_SET',
0x005C:'IOT_FTM_CMD_ID_ADC_CALI_GET',
0x005D:'IOT_FTM_CMD_ID_ADC_READ_REAL',
0x005E:'IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_W',
0x005F:'IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_R',
0x0060:'IOT_FTM_CMD_ID_RF_PHY_TX_TONE',
0x0061:'IOT_FTM_CMD_ID_RF_SPI_SYNC',
0x0062:'IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_W',
0x0063:'IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_R',
0x0064:'IOT_FTM_CMD_ID_MP_RF_TEST',
0x0065:'IOT_FTM_CMD_ID_RF_TRS_CHK',
0x0066:'IOT_FTM_CMD_ID_EFUSE_CHECK',
0x0067:'IOT_FTM_CMD_ID_MP_RF_CAL_CFG',
0x0068:'IOT_FTM_CMD_ID_MP_RF_CAL_MEAS',
0x0069:'IOT_FTM_CMD_ID_MP_RF_CAL_UPDATE',
0x006A:'IOT_FTM_CMD_ID_POWER_SYNC',
0x006B:'IOT_FTM_CMD_ID_SECURITY_CFG_SET',
0x006C:'IOT_FTM_CMD_ID_SECURITY_CFG_GET',
0x006D:'IOT_FTM_CMD_ID_RF_PHY_TX_TONE_RAW',
0x006E:'IOT_FTM_CMD_ID_TOPO_ADC_DUMP',
0x006F:'IOT_FTM_CMD_ID_IR_LOOPBACK_TEST',
0x0070:'IOT_FTM_CMD_ID_RF_TX_DC_LOOP_CALI',
0x0071:'IOT_FTM_CMD_ID_SET_GET_PT_INFO',
0x0072:'IOT_FTM_CMD_ID_DUMP_TO_MEM',
}
def ftm_decode(data:bytearray):
# 跳过开头的6个字节 src mac 和6个字节 dst mac
data=data[12:]
# print(data)
hdr=struct.unpack("<HHHHHH",data[:12])
hdr_dict={
"module_id":hex(hdr[0]),# 03是模块 04是pt底板
"crc":hex(hdr[1]),
"msg_id":f'{_CmdTable.get(hdr[2],"unknown")} ({hex(hdr[2])})',
"rsv1_rsv2":hex(hdr[3]),
"msg_len":hdr[4],
"sn":hdr[5]
}
cmd=struct.unpack("<HHH",data[12:12+6])
cmd_dict={
"cmd_id":f'{_CmdTable.get(cmd[0],"unknown")} ({hex(cmd[0])})',
"total_len":cmd[1],
"current_pkt":cmd[2],
}
if(len(data)==18+cmd_dict['total_len']):
payload=data[18:]
else:
payload=bytearray()
print(hdr_dict)
print(cmd_dict)
print(f"data: {payload.hex(' ')}")
def ftm_handle(data:bytearray):
while len(data)>0:
index_start=data.find(b'##')
index_end=data.find(b'@@')
if(index_start>=0 and index_end>=0):
try:
s=data[:index_start]
txt=s.decode("utf-8")
mywrite(txt)
except Exception as e:
pass
ftm_decode(data[index_start+2:index_end])
data=data[index_end+2:]
if __name__ == "__main__":
ftm_handle(bytearray.fromhex("2323000000000000000000000000030000004f0000000b0000004f00050005000910110f0d4040"))
ftm_handle(bytearray.fromhex("232300000000000000000000000004000000180000000200000024004040"))

View File

@@ -20,6 +20,7 @@ from bin.bin_to_hex import bin_file_decrypt
from bin.bin_to_hex import clear_tmp from bin.bin_to_hex import clear_tmp
from bin.bin_to_hex import load_flash_info from bin.bin_to_hex import load_flash_info
from bin.base import bin_path from bin.base import bin_path
from bin.factory_mode import ftm_handle
def init_send(s_port:serial.Serial, send_str:str): def init_send(s_port:serial.Serial, send_str:str):
@@ -182,6 +183,16 @@ def upload_bin(x_modem:xmodem.XMODEM, w_file):
myprint (f"Receiving {w_file} result: {xmodem_send}, consuming time: {(time_stamp_end-time_stamp_start)} s ") myprint (f"Receiving {w_file} result: {xmodem_send}, consuming time: {(time_stamp_end-time_stamp_start)} s ")
def recv_ser_data_ftm(s_port:serial.Serial,timeout:float=1):
recv_data=bytearray()
while timeout>0:
time.sleep(0.1)
timeout-=0.1
bytes2read = s_port.in_waiting
if(bytes2read>0):
tmp = s_port.read(bytes2read)
recv_data+=tmp
ftm_handle(recv_data)
def getc(size, timeout=1): def getc(size, timeout=1):
@@ -342,6 +353,8 @@ def global_def():
elif(args.console is not None): elif(args.console is not None):
iot_flash_file=args.console iot_flash_file=args.console
function_type='console' function_type='console'
elif(args.ftm):
function_type='ftm'
@@ -362,6 +375,7 @@ def parser_init():
parser.add_argument('-i','--layout_index',action='store',type=int,help='解析接收到的flash文件或转换bin文件时使用的layout不指定则不解析') parser.add_argument('-i','--layout_index',action='store',type=int,help='解析接收到的flash文件或转换bin文件时使用的layout不指定则不解析')
parser.add_argument('--b_rate',action='store',type=int,default=115200,help='下载ram程序 上传flash数据 控制台 接收log等 使用的串口波特率') parser.add_argument('--b_rate',action='store',type=int,default=115200,help='下载ram程序 上传flash数据 控制台 接收log等 使用的串口波特率')
parser.add_argument('--nb_rate',action='store',type=int,default=1500000,help='下载flash程序使用的串口波特率') parser.add_argument('--nb_rate',action='store',type=int,default=1500000,help='下载flash程序使用的串口波特率')
parser.add_argument('--ftm',action='store_true',type=bool,default=False,help='进入工厂模式')
@@ -412,6 +426,9 @@ if __name__ == '__main__':
recv_ser_data(ser) recv_ser_data(ser)
read_input(ser) read_input(ser)
sys.exit(0) sys.exit(0)
if(function_type=="ftm"):
myprint("此功能尚未实现")
sys.exit(0)
modem = xmodem.XMODEM(getc, putc, mode='xmodem1k') modem = xmodem.XMODEM(getc, putc, mode='xmodem1k')
# 发送启动字符让设备进入xmodem模式 # 发送启动字符让设备进入xmodem模式

View File

@@ -15,7 +15,7 @@ import time
''' '''
# 定义配置文件路径 # 定义配置文件路径
_vscode_cfg_path=os.path.normpath(os.path.abspath('.')+'/../../../.vscode/c_cpp_properties.json') _vscode_cfg_path=os.path.normpath(os.path.abspath(os.path.split(sys.argv[0])[0])+'/../../../.vscode/c_cpp_properties.json')
# 定义编译日志路径 # 定义编译日志路径
_build_log_path='build_log.log' _build_log_path='build_log.log'