diff --git a/projects/blezongkong/mdk/link_high_bank.PS1 b/projects/blezongkong/mdk/link_high_bank.PS1 new file mode 100644 index 0000000..1a1ad38 --- /dev/null +++ b/projects/blezongkong/mdk/link_high_bank.PS1 @@ -0,0 +1,134 @@ +$Bank_A = '_0x04000' +$Bank_B = '_0x20000' +$Ext_lnp = '.lnp' +$Ext_axf = '.axf' +$Ext_hex = '.hex' +$Ext_bin = '.bin' +$Ext_asm = '.asm' +$Path_lnp = '.\output\' + +# user defined +$Path_cmd = 'C:\APP\KeilMDK\ARM\ARMCC\bin' +$env:path+=";$Path_cmd;" + +# 获取最新的lnp文件(eg:\projects\bleOTA\mdk\output\bleOTA.lnp) +$full_path = Get-ChildItem -Path $Path_lnp -Recurse -ErrorAction SilentlyContinue -Filter *.lnp | Where-Object { $_.Extension -eq '.lnp' } | Where-Object {$_.LastWriteTime} | Select-Object -last 1 | Select-Object -ExpandProperty FullName + +# 以.为分隔符, 分割带路径的文件名(eg:\projects\bleOTA\mdk\output\bleOTA)和后缀名(eg:lnp) +# 去掉.lnp的长度 +$full_paht_len = $full_path.length - 4 +#$Pname, $Ext = $full_path.Split(".") +$Pname = $full_path.Substring(0, $full_paht_len) + +# 带路径不带后缀的名称 +# (eg:\projects\bleOTA\mdk\output\bleOTA) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000) +$Bank_A_name = $Pname +$Bank_B_name = $Pname+$Bank_B + +# 获取不带路径且不带后缀的lnp文件名 +$Bank_A_File_Name = (Get-Item $full_path).BaseName +$Bank_B_File_Name = $Bank_A_File_Name+$Bank_B + +# 拼成带路径的原始文件 +# (eg:\projects\bleOTA\mdk\output\bleOTA.lnp) +# (eg:\projects\bleOTA\mdk\output\bleOTA.axf) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x04000.hex) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x04000.bin) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x04000.asm) +$Org_lnp = $Bank_A_name+$Ext_lnp +$Org_axf = $Bank_A_name+$Ext_axf +$Org_hex = $Bank_A_name+'_0x04000'+$Ext_hex +$Org_bin = $Bank_A_name+'_0x04000'+$Ext_bin +$Org_asm = $Bank_A_name+'_0x04000'+$Ext_asm + +# 拼成带路径的目标文件 +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000.lnp) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000.axf) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000.hex) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000.bin) +# (eg:\projects\bleOTA\mdk\output\bleOTA_0x20000.asm) +$Obj_lnp = $Bank_B_name+$Ext_lnp +$Obj_axf = $Bank_B_name+$Ext_axf +$Obj_hex = $Bank_B_name+$Ext_hex +$Obj_bin = $Bank_B_name+$Ext_bin +$Obj_asm = $Bank_B_name+$Ext_asm + + +# 在原始lnp文件基础上替换sct文件, 并保存为目标lnp文件 +# (eg:link_xip_ble_0x04000替换为link_xip_ble_0x20000) +(Get-Content $Org_lnp) -Replace $Bank_A, $Bank_B | Set-Content $Obj_lnp + +# 替换目标lnp文件中的文件名 +# (eg:bleOTA替换为bleOTA_0x20000) +(Get-Content $Obj_lnp) -Replace $Bank_A_File_Name, $Bank_B_File_Name | Set-Content $Obj_lnp + +Write-Output "**************** Linking High Bank ... ****************" +# 链接生成目标文件(axf, map) +armlink.exe --Via $Obj_lnp + +# 删除目标lnp, 防止下次读取时存在多个lnp导致的报错 +Remove-Item $Obj_lnp + +# 生成hex +fromelf.exe $Org_axf --i32combined --output $Org_hex +fromelf.exe $Obj_axf --i32combined --output $Obj_hex + +# 生成bin +fromelf.exe $Org_axf --bin --output $Org_bin +fromelf.exe $Obj_axf --bin --output $Obj_bin + +# 生成asm +fromelf.exe $Org_axf --text -a -c --output $Org_asm +fromelf.exe $Obj_axf --text -a -c --output $Obj_asm + +# 计算CRC32 +Add-Type -TypeDefinition @" +using System; +using System.Runtime.InteropServices; + +public class Win32Api { + [DllImport("ntdll.dll")] + public static extern uint RtlComputeCrc32(uint dwInitial, byte[] pData, int iLen); +} +"@ + +function Get-CRC32 { + [CmdletBinding()] + param ( + [Parameter(Mandatory=$true,ValueFromPipeline = $true)] + [string]$InputFile + ) + + #Write-host $InputFile + + # Read the file as bytes + $fileBytes = [System.IO.File]::ReadAllBytes($InputFile) + + # Calculate the CRC32 checksum using the Win32 API + $crc32 = [Win32Api]::RtlComputeCrc32(0, $fileBytes, $fileBytes.Length) + + # Convert the CRC32 value to hexadecimal string + $crc32String = $crc32.ToString("X8") + + # Display the CRC32 checksum + Write-Output $crc32String +} + +$Bank_A = "File : " + $Bank_A_File_Name + '_0x04000' + $Ext_bin +$Bank_B = "File : " + $Bank_B_File_Name + $Ext_bin + +$CRC32 = Get-CRC32 $Org_bin +Write-Output "=================================" +Write-Output $Bank_A +$CRC32 = "CRC32: " + "0x" +$CRC32 +Write-Output $CRC32 +Write-Output "=================================" + +$CRC32 = Get-CRC32 $Obj_bin +Write-Output $Bank_B +$CRC32 = "CRC32: " + "0x" +$CRC32 +Write-Output $CRC32 +Write-Output "=================================" + +#pause \ No newline at end of file diff --git a/projects/blezongkong/mdk/link_xip_0x04000.sct b/projects/blezongkong/mdk/link_xip_0x04000.sct new file mode 100644 index 0000000..b0e3a95 --- /dev/null +++ b/projects/blezongkong/mdk/link_xip_0x04000.sct @@ -0,0 +1,40 @@ +#! armcc -E -I ..\src\ +#include "cfg.h" + +#define SCT_FLASH_BASE (0x18004000) +#define SCT_FLASH_END (0x18020000) +#define SCT_FLASH_LEN (SCT_FLASH_END - SCT_FLASH_BASE) + +LR_IROM1 SCT_FLASH_BASE SCT_FLASH_LEN +{ + ER_IROM1 SCT_FLASH_BASE SCT_FLASH_LEN + { + *.o (RESET, +First) + *(InRoot$$Sections) + startup*.o (+RO) + .ANY (+RO) + } + + RW_IRAM_VECT 0x20003000 EMPTY 152 + { + ; sram vector + } + + RW_IRAM_USER +0 + { + *.o(ram_func*) + .ANY (+RW +ZI) + } + + RW_IRAM_STACK 0x20008000-0x600 UNINIT 0x600 + { + .ANY (STACK) + } + + RW_IRAM_RETN 0x20008000 UNINIT 0x2000 + { + ; retention memory 8KB + ; user manual init + *.o(user_retention) + } +} diff --git a/projects/blezongkong/mdk/link_xip_0x20000.sct b/projects/blezongkong/mdk/link_xip_0x20000.sct new file mode 100644 index 0000000..135fbfe --- /dev/null +++ b/projects/blezongkong/mdk/link_xip_0x20000.sct @@ -0,0 +1,40 @@ +#! armcc -E -I ..\src\ +#include "cfg.h" + +#define SCT_FLASH_BASE (0x18020000) +#define SCT_FLASH_END (0x18040000) +#define SCT_FLASH_LEN (SCT_FLASH_END - SCT_FLASH_BASE) + +LR_IROM1 SCT_FLASH_BASE SCT_FLASH_LEN +{ + ER_IROM1 SCT_FLASH_BASE SCT_FLASH_LEN + { + *.o (RESET, +First) + *(InRoot$$Sections) + startup*.o (+RO) + .ANY (+RO) + } + + RW_IRAM_VECT 0x20003000 EMPTY 152 + { + ; sram vector + } + + RW_IRAM_USER +0 + { + *.o(ram_func*) + .ANY (+RW +ZI) + } + + RW_IRAM_STACK 0x20008000-0x600 UNINIT 0x600 + { + .ANY (STACK) + } + + RW_IRAM_RETN 0x20008000 UNINIT 0x2000 + { + ; retention memory 8KB + ; user manual init + *.o(user_retention) + } +} diff --git a/projects/blezongkong/mdk/zhongkong.uvprojx b/projects/blezongkong/mdk/zhongkong.uvprojx index 7981437..8dacb3e 100644 --- a/projects/blezongkong/mdk/zhongkong.uvprojx +++ b/projects/blezongkong/mdk/zhongkong.uvprojx @@ -7,7 +7,7 @@ - uartTest + OTA 0x4 ARM-ADS 5060750::V5.06 update 6 (build 750)::ARMCC @@ -48,7 +48,7 @@ 1 .\output\ - uartTest.elf + OTA_V2_3 1 0 1 @@ -79,10 +79,10 @@ 0 - 1 - 0 + 0 + 1 fromelf.exe --bin -o "$L@L.bin" "#L" - + powershell -executionpolicy Unrestricted -file .\link_high_bank.PS1 0 0 0 @@ -368,7 +368,7 @@ 0x00000000 0x00000000 - ..\..\..\core\mdk\link_xip.sct + .\link_xip_0x04000.sct --diag_suppress=L6312,L6314,L6329 diff --git a/projects/blezongkong/src/app_modbus.c b/projects/blezongkong/src/app_modbus.c index 673e078..c6249d9 100644 --- a/projects/blezongkong/src/app_modbus.c +++ b/projects/blezongkong/src/app_modbus.c @@ -127,6 +127,21 @@ void FunctionalCode_03_06(uint8_t CMDCode, uint16_t reg_addr , uint16_t reg_val_ MODBUS_Sent_BUF[len_count++] =sys_conf.VERSION & 0xff; break; } + case 0x0003: // 系统自检(只读) + if(CMDCode == 0x03){ + uint16_t sys_sta=0; + MODBUS_Sent_BUF[len_count++] =sys_sta >> 8; + MODBUS_Sent_BUF[len_count++] =sys_sta & 0xff; + MODBUS_Sent_BUF[2] +=2; + if(0 == --reg_val_num){ + break; + } + }else if(CMDCode == 0x06){ + // sys_conf.VERSION =reg_val_num; + // MODBUS_Sent_BUF[len_count++] =sys_conf.VERSION >> 8; + // MODBUS_Sent_BUF[len_count++] =sys_conf.VERSION & 0xff; + break; + } { // 0x0101-0x0002 case 0x0101: // // 写系统配置 if(CMDCode == 0x03){ // # 读 - 保持寄存器