From a40f6d69d06c334262cd6f6fff5d5262992ae0b7 Mon Sep 17 00:00:00 2001 From: armfly Date: Thu, 25 Mar 2021 11:42:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E8=B7=AF=E7=83=A7=E5=BD=95=E6=97=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8D=95=E7=8B=AC=E7=83=A7=E5=BD=95=E6=AF=8F?= =?UTF-8?q?1=E8=B7=AF,=20=E6=94=AF=E6=8C=81SPI=20Flash=E4=B8=80=E6=8B=96?= =?UTF-8?q?=E5=9B=9B=E7=83=A7=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 15 + Project/H7-BOOT.bin | Bin 99164 -> 99280 bytes Project/MDK-ARM(uV5)/project.uvoptx | 82 +-- Project/MDK-ARM(uV5)/project.uvprojx | 10 +- Project/MDK-ARM(uV5)/startup_stm32h743xx.s | 2 +- ..._app(V1.48).bin => h7_tool_app(V1.49).bin} | Bin 1324524 -> 1324524 bytes User/app/inc/file_lib.h | 9 +- User/app/inc/includes.h | 2 + User/app/inc/param.h | 1 + User/app/src/file_lib.c | 6 +- User/app/src/main.c | 5 + User/app/src/status_extend_menu.c | 215 +++++++- User/app/src/status_programmer.c | 56 +- User/app/src/status_system_set.c | 11 +- User/bsp/inc/bsp_key.h | 2 + User/bsp/inc/bsp_user_lib.h | 1 + User/bsp/src/bsp_emmc.c | 2 +- User/bsp/src/bsp_user_lib.c | 63 +++ User/daplink/source/daplink/cmsis-dap/SW_DP.c | 57 +- .../source/daplink/cmsis-dap/SW_DP_Multi.c | 278 +++++++--- .../source/daplink/cmsis-dap/SW_DP_Multi.h | 2 + .../source/daplink/interface/swd_host.c | 45 +- .../source/daplink/interface/swd_host_multi.c | 465 ++++++++++++++++- User/lua/if/lua_if.c | 3 +- User/lua/if/lua_if_swd.c | 39 +- User/modbus/modbus_reg_addr.h | 7 +- User/modbus/modbus_register.c | 30 ++ User/modbus/modbus_slave.h | 11 + User/modbus/modbus_swd.c | 97 +++- User/programmer/prog_if.c | 46 +- User/programmer/swd_prog_file.c | 2 + User/programmer/w25q_flash.c | 490 ++++++++++++++---- 32 files changed, 1635 insertions(+), 419 deletions(-) rename Project/{h7_tool_app(V1.48).bin => h7_tool_app(V1.49).bin} (79%) diff --git a/CHANGELOG b/CHANGELOG index fb3fd7e..82f0a27 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,19 @@ +---------------------------------------------------------------------------- +2021-03-25 V1.49 对应PC软件版本 V1.4.6 +1.完善脱机烧录功能 + - 脱机烧录菜单变更,进入后选择烧录模式,再进入烧录界面,方面单路和多路切换 + - 一拖四功能支持单独烧录第2路、单独烧录第3路、单独烧录第4路。 + - 脱机烧录的滚码支持64bit整数,支持修改递增步长 + - PC传送配置文件时,TOOL自动切换到烧录状态 + - 新增国民技术MCU的烧录支持 + +2.EMMC磁盘文件更新 + - 滚码支持64bit整数,支持递增步长设置 + - 新增国民技术MCU的配置文件 + - 支持单独烧录第2路、单独烧录第3路、单独烧录第4路 + - 完善SPI Flash的全片擦除功能 +3.提示:建议BOOT升级到V2.01版本,完善了U盘拖放升级功能. ---------------------------------------------------------------------------- 2021-03-17 V1.48 对应PC软件版本 V1.4.5 diff --git a/Project/H7-BOOT.bin b/Project/H7-BOOT.bin index 6d192ea0c2aa407f28f3b713bcbe66caf2bf87aa..9bf38aeb8cce5bdfcf12644d427bf4713fa5a0f6 100644 GIT binary patch delta 4507 zcmZu#33wD$w!Wvjy1UX@y0eoeOLa(~gTZV9i4n*~r2|61F$w}2M20ZvGk|D7mJW*v zFb;_aXd?)TJf2Zxo}DtpfDlkX9G4*^j-_rno0~JW9-qJm{l5ydCufMPAoco`x z?(K8Vy;WCU(VVZ*Os?F@CLLx7cc+1HhdILCqO?s%IFpNTz>s@>v(FH2&_Fl^%zu+` zi_g?gUIF#>_EF4pU*r7{h3O1eZ!xgf4-*b&K{Aem;-CTQ@lzT>v8vCDVC=2bs(uy+ zuVN^J%yY5$UrZwWD1OGg&8oXM0@p9D(w3;yZf}6}uK0ACKKVcQiKmrhE7YJ?9owCQg(F<97+@-sG!HKp-9*e zGIj{*c27P|h&cf#gguk6&%IROX`Gvbd2!iAH7$poO!+dQKqwKiDY`>!4>K_#Iv1PB zmKZY36k=WCwTPBzxGU~SwX2y56VA-sX8PHu7D63I2CSv(&eRgVLM#115zcXc``Dq; zWpri6=@(H1p~bKT8y;E$?}#wzGQd{snY;uR;M6I{;2#Ki3Gg$T=zSjM=VifuT$Q%~ z=3rOe%izS){9N7rF2=!E1WFMu+?n49pWyg{KLk%4WF3iXQv|+3Ctb%~1@= zEAj98Hwq;Vodo2X*w>=i8Jt#uqvJVtFsTR9%Za1#2lBIEs4mZ-8Ksu~2b+pU!T~&9 zR5qsDPx`IYpEYegjjxklqu$8qO+)^OdF^?{qfXj`Ia4>lc5I)zJo1YB#n{ptPw0;J z5&ee#s{dBxlW~er!o>J-n~=&de*91<00(*m6D-EK;(^>JJwtQrx6T@#n@*bUqw|UjnlZm5H?q}bPGtKGP$78aZtu=(dJ-VjV|__D zG~vOLt8`gwrj22BQi4-#nRbF1EBc4+Imzj-JZ_*K6>psMwcqf&(M3AKC-Y+iH#@Uu z4QIz+@zjhs=*I77Ow`V&1)!5Y#kiT{v@`t*@50$LBS#kbNC)9JJ3mrU+VMm0Z|=LX zdggRmvEo-VD|C8|TP*}Q7!%u}FRV%$5I$Mh%W8|K|3 z)3|Z(6aS%)y$AdhW9BV@pYWx5%k=L%fA4A@_RU*tc#&d(4*0iwlMDYize4}uJ>ZYn zGk+n=O0-@I7R-TeanFM1Kp*G-%}^zs!|11G=x@|QcfAs;VER960{C3AFe1E;JQ4}G|5 z#iqz(zS0|{q`Zoej`&J$kd#Ks*)e$K_{a*sMiAPAEZhx3QYtLvW`U8c`1s1j%zb`5 zu`)5Tc*wMZ8WaqfHdAgA4y>HVsQlt1FYE=lCf-`L7~nXTy);!>%9qBdnDv7gv^EwU zYhGZ+53?&?ejP4h;M%On9fM|jw{tVelX!BPQeIF=N5ns@{U-zjv=J_vUKg=seLft; z?d#i_z(M@3dK%VkSj!{~Vu&>rp2S>h8Z_cE>o~ZI4c0UUeE2u({Y-)n-PRvyTkfg; znp%q+#jx%{Fq6(7dK>>_u=4^dMGa!rCNr$VrcK8dgHXGgH^*K&x0*A@bk?rn%~6-m zt>Mh!owYCXX2Yd(FLUPL&f2xSS$FB&TF$KPtX;>O*-Pivac1ZQzOtC`-d;k+U6%^g zLXZ$86sB@rE0~ayfQp4i3zH%cDF$EKoW^zoNy6sMk7kVMinfrdymqtTmpA!&dxV88 z2R^KXs|=+$m`8T5VD!H;ABllm(zx@~e8|N^TjnrjXK?qHc-oCxx2#O6_m=is%hT($ z`~!9A?}S*~a;=vns!hqfM-KEVcc({u_!SnIY!g0G^Ds1v`)dxWHDQ^+g=C7;UVV)T zvyKPOL9Y;sBaDH=2(Ntug?RC`8piJvpT^Mu8*uB+T*$&RJ10Q|s&-9b z`aM{*E05{&;48cGpannOl@Ik8uzQMjxrgQ5a*J5Hd!hE;&`yz6lU;h*rNcd>cde%??=q@6j4@ z***ZBi`KOw9B|@``{%$3@$dWf0B_;A8QNlk%s ze(~sAKQXWwn-1Owh+oqCcF}dPTFbaS;@ZP!wXj|+Y>flMKYhwBpcdX+W)|+s-A=4L z!t1{t0$Jf81-)`J?mvqGO zr#*%7I*~h?%KYdQCmbyRx~;7~Hj=sM6L%jw!GJ?7JF#D_o$FRx`sF{(BR6m$p-YX zLXw^Shs(!NN#`IopUtG1eEDn!sAFAs<#sXj+$as~632g4s*0TJ(+Hy+>SkG9@7L^$ zcQDOPxgHxjSHWo1Uob%=W?YB?4yRvOH+q%{IDfB89!F1M$uy60DK!n*cKbB@VyUex z_xkbXg~qtAT*E3?C>>T=^{YxP9_rc}r#Pd%AYa+LqlMQ6&Aw@l%2;A9K0hGWh_kz6 z)REO5!vB7IKgryc3&af;VbPY%L6QTwK2!^5O{B zSlaq;xgwKi36lJ=mpH!bRgMIo_g2x>Sgl+cz!_+3X{4>?Ca!ZWhb2@$#`x^7y8q~n zpzPnYB#uj<=U$)65_)sGpIfyjJ<}*A4<1v&@z$%bpMj6ts#WkDz!BRm77j31ytbWcm;fi+K39Vs zpv|^U3*)$HZmn=z{?Tn~(ZV*+*d}q%3LmuH;lKu=*IWkrh9$M`djDZsLbv3xwmmv{ zHDQB`x98nHY8u@r$=f_i{vH`ZI!uWaskRjd!qng;u2}w#{HRM2pRzRs!U27ai)L4z z(l*qV+p^U*JqXrC<-5vbPq#3s(q+y2N;F3iGbh_*`z{FHWBOgTKL-QtCNA62V0Z(H zZDk>V8MIGy=q*7dwM#f5xTJOwO$NFj(~^9^QCMF1KxshJ@5_JW7<+p&WNh{7Fer*{s+f0sL#T?PQwB-Ls$Mfq za9bq@Nj7IR_~P7dGTPwa6Z3@%;ii1W%k}ZxpXfOr_&)hDTX+m)jXLK21(@h2cA7gK zeX@a8sP&GamUM`{eR6`+YiPfgw>Z&}x z*S0zy#z0$JQ#@>6G<)w0z$qUe_Pz*QghH!;;}yDw9tae=7Px$ct_Q9_p;lU{^fLry zlN>BNij6g8} delta 4519 zcmZ`-3tUv?w*S_iJu{o(F@p#w57{#U4u&G)10r=0*n*~LWm)MFH4{@yG}4rE5FeS> zf|fdorl2>EkGwf<3Gsy%S{}74KDwUcYxG>Bv~&-Gd){-u!R+R_-TnLRz1I4#$M@LZ zx7N4!xs|G`D^x@0u3{7SFoavOfpB{`!Y!t>K|^^5;Rr*XxUMx5&a0z1z0PhToV~ev z=sbw8w)SM47qKryVLyheF3>S$d#Z;fV=5GcRM2qW((nP7YExHcNIi9_9?L;@3}=vW z#^QFy0Hxw7=C7=>cqwpZu}od4P#*IHNpr<-H1)t-?U!9*2o&cPn)zUw_cr1KmD(luzRbpnvKGCh9mx>}?I+5O;NR4ag z5kmI&z(HMJOL)ySQ{ZVk`@N?4%)FKR_Bfd0S;BCkP{^d{c(JjIo(VhWU=3`cF5O6> zzd6L8y6%gH!{WwNtCDHwaZLXY^;Vx!2)BLJVJ=d(q!#ieYH0^WI9uPw-knk%I{U|K zQz)jiYHUQ$mvGWyOv=cGI-HqN1S7C9qZ)>aqXtv}#NgS1>5R?y$)I9r!YP9$!^e1h zP!UvN_}~o?Bkmp?0qTd|Kr3DGL}n7~$Ge%a^!2H;;vo%_vKnDI-pGm%4|Ayml?`}) z8ec*-sHL75`g9h&f+L=;gb&5jPiI4)QWsxxti&Xlh`!{zVn|c}o$oXUYM#>RuKQgc ziW$#Lhf%oUnHlhw2t%#_6ydd@GoUBt4?6^#5KIYRMLm7$F~^hv)3MAn33}iK(_%P^ zMLF4;b_ZkQOM<0;IB;!FEv&+U!=DfJdRUvGJVoG3G}4#2Zunafy?shaON@>Ba<-#% zUI5>U(YfQtul|GO5Fg=>{3KQM`Po;*QeUQu`797R&OwatwFI~q9bDs)pL`z&_^}Qm zF@!NHsm3%j!0Ss2rUW#(cs#d|4k0)%9W*#3FMfnZ>hP0x!td=MY0tHg1&+!Ste{tR^eZN|+*{s#;X*95Q9h3-e`J!j-Pg)Wry@b_;5ikQkFT6>o zb>+xj)cUqx+&A(l)B9cjBY#dh>YsZ=MwQ=qy5$Cx@RaBY=hszwmR_ji6vU{1h^ZoO`O6iq;LH= ze9{D{5jRen1KNMm#PQfsA$^3=lSgaopTLT7{^TOL1UULegQx)M?ChFD{%q zf$@9r{M1ZXD+W)?VgqSWm@y_m*3al2AYacg1ZMun851^uQIa2S9FII z7B6I^a$n&cl2S{#1sFPiU}RsvN)Q@D3b;Fjq?8mC8wExZ@TK|F8M_aU&NoDccDj~O z2d>j~2jvvlG5=NOluvx_?M(pxA>J>W4p4~W7vu+~azQTzljp^d@;J0DdK=srTpo|} z7Jmx0l*@=5?=@O4I+hWW#FJ)9c|jqSi_e$;3PJ0>BHT85PshUdbHI$N-*04EJb1lg zBvvgcXKs5i%$y2|m~Bpj*KwA)5BwE3nA4bVz4$kCU*@(KUFKUfD_^U)M7_nOVwV~( z7)i^m*4j68R$gGGs~%ifX@p#?t2`9j=VvKbDTD}7LT;-1!aU~R?YU6EqzFXnhR2ts z(YlW9%U;m_tLok5ovOXdConggQL~~4Y{8Tj^Ak^dirUS^{i@XbfU15w!wOvT*B)X} z>XUf4obL%d`+LM=D_CHfc|5uDS-2%eeDJwawK*NQnso8#nopQ6Ap?P%P460touPDd zx;V9}3j?iK_Q`+2dpH_bGFg7{2TTTNMDN;cn1fmChQJtHux=RB*MkSvnV3)yy4IQC z7tCIt1E=x5^~2P=-7N2te-Xb~KUe`CbZ;2J5SN%&V+2@-b2bixGTgJV7fiuR8?UI` zTj{A~D}J@Fx}OH*xvqaX|-ullF@@HUnrfeiPH2cxTH5 zaEQ6JTFANT3*q}!5k9L5`2Lg*tm?PJBY*7aW}U8&ua)H+4mxWDs>~66s$hp(ZgY3D z&elg!&3OlDa>_3t*5w30@91XzP|r|wC*G(V72=db>4pxXT?umFpsmB1EGI778prf@ z;-_2xlIfMBsl(@b9d(FytZ}e&*Ep2sH4YW+z#4~|uvN+`Vt}3M0A6Jtx(0Ky0Xw2VF0kQ0LYwg)e3qg@4-STB2y-ss1EpGz@`RSlZB(1RmfOv}-J# zBW2Yw1ue2Wg9>E1!)@XNyqfa&#qkH+K+gr^4yG`JoLGJ^l}T`lyABQqxQxFZie)1F zqUP{X1}=-Ij&4z^(WNYCmlxq%%}G#->zcE=Gj7td)-u^?5rU$nCyo_34yKzQcNk(qGVj zVt430Co9BR&*+8Pc6kUkoJ<1~ww_GVo%OLoqLsez(mqrZ?8CTk`_pYu^ldsQUvxf{ zABfAp>#2hO6nB1Kq=-bHO6X}*?vUjJe%0n4HfD!IK8>O0%b*x5&+B8095HtZ8D%HI zXMZNammKV|sRHTwvhYA2j!oy^OTNkj=Wlh&Gw2B`i7u5gO7)%b!f3p>&UktUPQ6eY z&;4c+^}ETJzDFjq{52+AT*X}Fao5EdI4+*J*j*WU$W8b^R_SBRL%Cdh@b`LvmALat zMwH9-e+|00vF%EK{V88jJ1Gq+cqrSQW_mnVb#g`R2j_uaLHWCwe{~idLF?57cz`We zt&oqE*DCbOJ3~Gyw8t1(<{gB8T*(9S5KOwB3!jQJua96LSG3x)G>pcHzuf5oE;0CS zs0JR0-8(iapc?BP(^S{C5boD4*uy!S3H9Q?IeTZzo=}@{lHVBAQXFTT=%=SRzad>1 zD@d}(Lu}Vu1C{=CE2{@i8MtYR+C=ZvLBK6SyR&pa-JkkTp#Ix`_y3`_mila^w>bm2 zT?25v%S_MZ(e9ME{(s`0)!F=D4^DI^=Y{{j22nKr&CdSq{`3Bgd6ZH&r{hU?GIN?0 z@3~VUJl|s$Rtf!uY(XbOEL!^g2`g#pdRiu%m@Mtgd1Es z`duZ}uiN`9-EjBi*DTs#Sd-A`0WgIXxIoYFxCGtg`C>EPKey*qoZ%3)~Ff2Bp>d@Gu^MK{b3 zhYKu}Sw=*GXn4~Xr&sQ{C%@q<8l^qGh8~6w*i~BgnyD=^{Mp+3G`Cpd=;vcnt0!db zS;v4X?RxqhTpd;&UfrcSWXD4}*2~j8R9_lFZEGyvXh=v6_XMW!-EfXV%e+Gz-E;xN z0o2gcwj^9Z(RaP1sjPKBO)C~t2*g-?9B3@FyMZr$fSV-iY`h^yC=u?-QC`l@b8pb| zJMeb7%CfRMWc2LtJO)Z##7Y-VlU*K3x3u|z?gP>!w%X-f%eC%s0nRm8W1x^>c)!IH z2YGPWk`oUzlox>{p0n(UhuGLlPD5QX?N7FgNTu|XYqcX~YwtRSzc0UT`DZ+&(AN># z0~%6RxkzHDjVl=I7%-L*n7hr4>TW(iu7tkwdH3WguGiw!srN6;Jz}){+5>uly&*CI zR!gpHzX;b#o)C zZ^UwSY|L3UCjE;D@3mO& 0 1 - g_tModS.TxBuf + g_gMulSwd 1 1 - g_RecMemo + _pStr 2 1 - _id + ulInt,0x0A 3 1 - s_DS18B20_TempReg + ulInt 4 1 - g_uiTimeHighWord - - - 5 - 1 - g_tFLM - - - 6 - 1 - timeout - - - 7 - 1 - uwTick-timeout - - - 8 - 1 - s_lua_prog_buf - - - 9 - 1 - s_lua_prog_len - - - 10 - 1 - s_lua_prog_buf[0x000038AB] - - - 11 - 1 - R0 - - - 12 - 1 - ack[0] - - - 13 - 1 - ack[1] - - - 14 - 1 - s_debug + _pIni @@ -275,7 +225,7 @@ 0 1 - 0 + 1 0 0 0 @@ -1179,7 +1129,7 @@ MDK-ARM - 0 + 1 0 0 0 @@ -2975,7 +2925,7 @@ Modbus - 0 + 1 0 0 0 @@ -3174,8 +3124,8 @@ 0 0 0 - ..\..\User\programmer\stm8_flash.c - stm8_flash.c + ..\..\User\programmer\stm8_swim.c + stm8_swim.c 0 0 @@ -3186,8 +3136,8 @@ 0 0 0 - ..\..\User\programmer\stm8_swim.c - stm8_swim.c + ..\..\User\programmer\stm8_flash.c + stm8_flash.c 0 0 @@ -3907,7 +3857,7 @@ DAP_bsp - 1 + 0 0 0 0 @@ -4023,7 +3973,7 @@ DAP_Host - 1 + 0 0 0 0 @@ -4103,7 +4053,7 @@ ST_USB_Device_Library_Core - 1 + 0 0 0 0 @@ -4147,7 +4097,7 @@ ST_USB_Device_Library_Class - 1 + 0 0 0 0 diff --git a/Project/MDK-ARM(uV5)/project.uvprojx b/Project/MDK-ARM(uV5)/project.uvprojx index 01c5e2d..4e5115c 100755 --- a/Project/MDK-ARM(uV5)/project.uvprojx +++ b/Project/MDK-ARM(uV5)/project.uvprojx @@ -1695,16 +1695,16 @@ 5 ..\..\User\programmer\SWD_flash.h - - stm8_flash.c - 1 - ..\..\User\programmer\stm8_flash.c - stm8_swim.c 1 ..\..\User\programmer\stm8_swim.c + + stm8_flash.c + 1 + ..\..\User\programmer\stm8_flash.c + edc_crc_a.asm 2 diff --git a/Project/MDK-ARM(uV5)/startup_stm32h743xx.s b/Project/MDK-ARM(uV5)/startup_stm32h743xx.s index 681b537..a5c08d8 100755 --- a/Project/MDK-ARM(uV5)/startup_stm32h743xx.s +++ b/Project/MDK-ARM(uV5)/startup_stm32h743xx.s @@ -68,7 +68,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler - DCD 0x00000148 ; Reserved H7-TOOL APP 固件版本 + DCD 0x00000149 ; Reserved H7-TOOL APP 固件版本 DCD 0 ; Reserved 固件小版本 DCD 0 ; Reserved DCD 0 ; Reserved diff --git a/Project/h7_tool_app(V1.48).bin b/Project/h7_tool_app(V1.49).bin similarity index 79% rename from Project/h7_tool_app(V1.48).bin rename to Project/h7_tool_app(V1.49).bin index 57c04a72f086a2387fb494874b5f5f6133044c3a..cc0fd7136f2c8569a2c926161dbd5db0c4c64139 100644 GIT binary patch delta 121945 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�-^#M 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 z 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 delta 118260 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 diff --git a/User/app/inc/file_lib.h b/User/app/inc/file_lib.h index 7c783fb..b59c30c 100644 --- a/User/app/inc/file_lib.h +++ b/User/app/inc/file_lib.h @@ -13,6 +13,7 @@ #include "ff.h" /* FatFS文件系统模块*/ #include "ff_gen_drv.h" #include "sd_diskio_dma.h" +#include "bsp.h" /* Lua程序根目录 */ #define LUA_ROOT_DIR "0:/H7-TOOL/Lua" @@ -36,7 +37,9 @@ typedef struct uint8_t Type[FILE_MAX_NUM]; char Name[FILE_MAX_NUM][FILE_NAME_MAX_LEN + 1]; uint8_t Count; - char Path[200]; + char Path[200]; + + uint16_t Cursor; }FILE_LIST_T; /* prog ini文件结构 */ @@ -47,7 +50,7 @@ typedef struct uint32_t ProgramLimit; /* 烧录次数限制 0表示不限制 */ uint32_t ProgrammedCount; - uint32_t ProductSN; /* 产品序号(整数部分) */ + int64_t ProductSN; /* 产品序号(整数部分) */ }PROG_INI_T; @@ -82,7 +85,7 @@ void FixFileName(char *_Path); void ini_ReadString(const char *_IniBuf, const char *_ParamName, char *_OutBuff, int32_t _BuffSize); -int32_t ini_ReadInteger(const char *_IniBuf, const char *_ParamName); +int64_t ini_ReadInteger(const char *_IniBuf, const char *_ParamName); void ini_WriteString(const char *_IniBuf, const char *_ParamName, const char *_NewStr, uint32_t _IniBufSize); void ini_WriteInteger(const char *_IniBuf, const char *_ParamName, int _IntValue, uint32_t _IniBufSize); int32_t ReadProgIniFile(char *_LuaPath, PROG_INI_T *pIni); diff --git a/User/app/inc/includes.h b/User/app/inc/includes.h index 6fa723d..f989df3 100644 --- a/User/app/inc/includes.h +++ b/User/app/inc/includes.h @@ -75,6 +75,8 @@ enum MS_EXTEND_MENU_LUA, /* 第2级菜单-LUA程序 */ MS_EXTEND_MENU_REC, /* 第2级菜单-数据记录仪 */ + MS_EXTEND_MENU_PROG_MODE, /* 第2级菜单-烧录器 */ + MS_LUA_SELECT_FILE, /* 浏览lua文件 */ MS_LUA_EXEC_FILE, /* 执行lua文件 */ diff --git a/User/app/inc/param.h b/User/app/inc/param.h index d8400b3..968f3e2 100755 --- a/User/app/inc/param.h +++ b/User/app/inc/param.h @@ -207,6 +207,7 @@ typedef struct uint8_t SaveAlgoToCFile; /* 解析FLM时,保存解析结果到C文件,仅仅用于debug */ uint8_t ReqWriteBoot; /* 用于PC机通知刷新boot */ + uint8_t ReqProgOnce; /* 用于PC机通知TOOL烧录一次*/ uint8_t ReqJump; /* 请求跳转 */ uint8_t UsbEmmcRemoved; /* U盘移除 */ diff --git a/User/app/src/file_lib.c b/User/app/src/file_lib.c index dd22b93..bd8cf2e 100644 --- a/User/app/src/file_lib.c +++ b/User/app/src/file_lib.c @@ -489,7 +489,7 @@ void ini_WriteString(const char *_IniBuf, const char *_ParamName, const char *_N * 返 回 值: 读到的整数值。如果没找到则返回0 ********************************************************************************************************* */ -int32_t ini_ReadInteger(const char *_IniBuf, const char *_ParamName) +int64_t ini_ReadInteger(const char *_IniBuf, const char *_ParamName) { /* Count = -1 @@ -510,7 +510,7 @@ int32_t ini_ReadInteger(const char *_IniBuf, const char *_ParamName) return 0; } - return str_to_int3(p + 1); + return str_to_int64(p + 1); } /* @@ -694,7 +694,7 @@ int32_t WriteProgIniFile(char *_LuaPath, PROG_INI_T *_pIni) sprintf(FsReadBuf, "Locked = %d\r\n", _pIni->Locked); sprintf(&FsReadBuf[strlen(FsReadBuf)], "ProgramLimit = %d\r\n", _pIni->ProgramLimit); sprintf(&FsReadBuf[strlen(FsReadBuf)], "ProgrammedCount = %d\r\n", _pIni->ProgrammedCount); - sprintf(&FsReadBuf[strlen(FsReadBuf)], "ProductSN = %d\r\n", _pIni->ProductSN); + sprintf(&FsReadBuf[strlen(FsReadBuf)], "ProductSN = %lld\r\n", _pIni->ProductSN); /* 打开ini文件准备写 */ re = f_open(&g_file, path, FA_WRITE | FA_CREATE_ALWAYS); diff --git a/User/app/src/main.c b/User/app/src/main.c index 89acade..eefad56 100755 --- a/User/app/src/main.c +++ b/User/app/src/main.c @@ -54,6 +54,7 @@ extern void status_DS18B20Meter(void); +extern void status_ExtendMenuProg(void); uint16_t GetStatusIndex(uint16_t _NowStatus); @@ -228,6 +229,10 @@ int main(void) status_ProgWork(); break; + case MS_EXTEND_MENU_PROG_MODE: /* 脱机下载器 - 菜单选择模式 */ + status_ExtendMenuProg(); + break; + case MS_PROG_SETTING: /* 脱机下载器 - 参数设置 */ status_ProgSetting(); break; diff --git a/User/app/src/status_extend_menu.c b/User/app/src/status_extend_menu.c index 3a9987c..3d8702a 100644 --- a/User/app/src/status_extend_menu.c +++ b/User/app/src/status_extend_menu.c @@ -22,12 +22,11 @@ const uint8_t *g_Menu1_Text[] = { " 1 CMSIS-DAP仿真器", - " 2 脱机烧录器(单路)", - " 3 脱机烧录器(多路)", - " 4 LUA小程序", - " 5 数据监视器", - " 6 USB虚拟串口", - " 7 系统设置", + " 2 脱机烧录器", + " 3 LUA小程序", + " 4 数据监视器", + " 5 USB虚拟串口", + " 6 系统设置", /* 结束符号, 用于菜单函数自动识别菜单项个数 */ "&" @@ -46,6 +45,22 @@ const uint8_t *g_MenuRec_Text[] = MENU_T g_tMenuRec; +const char *g_MenuProgMode_Text[] = +{ + "1 单路(无需1拖4板)", + "2 1拖4(第1-4路)", + "3 1拖3(第1-3路)", + "4 1拖2(第1-2路)", + "5 1拖1(第1路)", + "6 1拖1(第2路)", + "7 1拖1(第3路)", + "8 1拖1(第4路)", + + /* 结束符号, 用于菜单函数自动识别菜单项个数 */ + "&" +}; +MENU_T g_tMenuProgMode; + void JumpToDAPLink(void); /* @@ -63,7 +78,7 @@ void status_ExtendMenu1(void) static uint8_t s_MenuInit = 0; - DispHeader("扩展功能"); + DispHeader2(8, "扩展功能"); // DispHelpBar("", // ""); @@ -76,14 +91,24 @@ void status_ExtendMenu1(void) g_tMenu1.Height = MENU_HEIGHT; g_tMenu1.Width = MENU_WIDTH; g_tMenu1.LineCap = MENU_CAP; - g_tMenu1.ViewLine = 8; + if (g_LcdHeight == 320) + { + g_tMenu1.ViewLine = 8; + } + else + { + g_tMenu1.ViewLine = 7; + } g_tMenu1.Font.FontCode = FC_ST_24; g_tMenu1.Font.Space = 0; g_tMenu1.RollBackEn = 1; /* 允许回滚 */ g_tMenu1.GBK = 0; g_tMenu1.ActiveBackColor = 0; /* 选中行背景色ID */ LCD_InitMenu(&g_tMenu1, (char **)g_Menu1_Text); /* 初始化菜单结构 */ - } + } + g_tMenu1.Left = MENU_LEFT; /* 横竖屏切换回修改居中坐标 */ + + LCD_DispMenu(&g_tMenu1); fRefresh = 1; @@ -119,27 +144,21 @@ void status_ExtendMenu1(void) } else if (g_tMenu1.Cursor == 1) { - g_gMulSwd.MultiMode = 0; - g_MainStatus = MS_PROG_WORK; - } + g_MainStatus = MS_EXTEND_MENU_PROG_MODE; + } else if (g_tMenu1.Cursor == 2) - { - g_gMulSwd.MultiMode = g_tParam.MultiProgMode; - g_MainStatus = MS_PROG_WORK; - } - else if (g_tMenu1.Cursor == 3) { g_MainStatus = MS_LUA_SELECT_FILE; } - else if (g_tMenu1.Cursor == 4) + else if (g_tMenu1.Cursor == 3) { g_MainStatus = MS_EXTEND_MENU_REC; } - else if (g_tMenu1.Cursor == 5) + else if (g_tMenu1.Cursor == 4) { g_MainStatus = MS_USB_UART; } - else if (g_tMenu1.Cursor == 6) + else if (g_tMenu1.Cursor == 5) { g_MainStatus = MS_SYSTEM_SET; } @@ -192,9 +211,10 @@ void status_ExtendMenuRec(void) g_tMenuRec.ActiveBackColor = 0; /* 选中行背景色ID */ LCD_InitMenu(&g_tMenuRec, (char **)g_MenuRec_Text); /* 初始化菜单结构 */ } + g_tMenuRec.Left = MENU_LEFT; /* 横竖屏切换回修改居中坐标 */ LCD_DispMenu(&g_tMenuRec); - DispHeader("请选择"); + DispHeader2(84, "请选择"); // DispHelpBar("", // ""); @@ -264,6 +284,159 @@ void status_ExtendMenuRec(void) } } + +/* +********************************************************************************************************* +* 函 数 名: status_ExtendMenuProg +* 功能说明: 扩展功能菜单 选择烧录器 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void status_ExtendMenuProg(void) +{ + uint8_t ucKeyCode; /* 按键代码 */ + uint8_t fRefresh; + static uint8_t s_MenuInit = 0; + + if (s_MenuInit == 0) + { + s_MenuInit = 1; + + g_tMenuProgMode.Left = MENU_LEFT; + g_tMenuProgMode.Top = MENU_TOP; + g_tMenuProgMode.Height = MENU_HEIGHT; + g_tMenuProgMode.Width = MENU_WIDTH; + g_tMenuProgMode.LineCap = MENU_CAP; + if (g_LcdHeight == 320) + { + g_tMenuProgMode.ViewLine = 8; + } + else + { + g_tMenuProgMode.ViewLine = 7; + } + g_tMenuProgMode.Font.FontCode = FC_ST_24; + g_tMenuProgMode.Font.Space = 0; + g_tMenuProgMode.RollBackEn = 1; /* 允许回滚 */ + g_tMenuProgMode.GBK = 0; + g_tMenuProgMode.ActiveBackColor = 0; /* 选中行背景色ID */ + LCD_InitMenu(&g_tMenuProgMode, (char **)g_MenuProgMode_Text); /* 初始化菜单结构 */ + } + g_tMenuProgMode.Left = MENU_LEFT; /* 横竖屏切换回修改居中坐标 */ + LCD_DispMenu(&g_tMenuProgMode); + + DispHeader2(82, "选择烧录模式"); +// DispHelpBar("", +// ""); + + LCD_DispMenu(&g_tMenuProgMode); + + fRefresh = 1; + while (g_MainStatus == MS_EXTEND_MENU_PROG_MODE) + { + if (fRefresh) /* 刷新整个界面 */ + { + fRefresh = 0; + + if (g_tMenuRec.Cursor == 0) + { + ; + } + } + + bsp_Idle(); + + ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */ + if (ucKeyCode != KEY_NONE) + { + /* 有键按下 */ + switch (ucKeyCode) + { + case KEY_UP_S: /* S键 上 */ + PlayKeyTone(); + LCD_MoveUpMenu(&g_tMenuProgMode); + break; + + case KEY_LONG_DOWN_S: /* S键 上 */ + PlayKeyTone(); + + g_gMulSwd.SwitchPin = 0; + if (g_tMenuProgMode.Cursor == 0) + { + g_gMulSwd.MultiMode = 0; + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 1) + { + g_tParam.MultiProgMode = 4; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 2) + { + g_tParam.MultiProgMode = 3; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 3) + { + g_tParam.MultiProgMode = 2; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 4) + { + g_tParam.MultiProgMode = 1; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_gMulSwd.SwitchPin = 0; /* 只烧写第1通道 */ + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 5) + { + g_tParam.MultiProgMode = 1; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_gMulSwd.SwitchPin = 1; /* 只烧写第2通道 */ + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 6) + { + g_tParam.MultiProgMode = 1; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_gMulSwd.SwitchPin = 2; /* 只烧写第3通道 */ + g_MainStatus = MS_PROG_WORK; + } + else if (g_tMenuProgMode.Cursor == 7) + { + g_tParam.MultiProgMode = 1; + g_gMulSwd.MultiMode = g_tParam.MultiProgMode; + g_gMulSwd.SwitchPin = 3; /* 只烧写第4通道 */ + g_MainStatus = MS_PROG_WORK; + } + break; + + case KEY_UP_C: /* C键 下 */ + PlayKeyTone(); + LCD_MoveDownMenu(&g_tMenuProgMode); + break; + + case KEY_LONG_DOWN_C: /* C键长按 */ + PlayKeyTone(); + g_MainStatus = MS_EXTEND_MENU1; + break; + + default: + break; + } + } + } + + if (g_MainStatus == MS_PROG_WORK) + { + ; + } +} + /* ********************************************************************************************************* * 函 数 名: JumpToDAPLink diff --git a/User/app/src/status_programmer.c b/User/app/src/status_programmer.c index c8ceb4e..30ca543 100755 --- a/User/app/src/status_programmer.c +++ b/User/app/src/status_programmer.c @@ -251,11 +251,22 @@ void status_ProgWork(void) // } /* 当前烧录模式 */ + g_gMulSwd.Error[0] = 0; + g_gMulSwd.Error[1] = 0; + g_gMulSwd.Error[2] = 0; + g_gMulSwd.Error[3] = 0; + if (g_gMulSwd.MultiMode == 0) PG_PrintText("单路模式"); - else if (g_gMulSwd.MultiMode == 1) PG_PrintText("多路模式:1路"); - else if (g_gMulSwd.MultiMode == 2) PG_PrintText("多路模式:1-2路"); - else if (g_gMulSwd.MultiMode == 3) PG_PrintText("多路模式:1-3路"); - else if (g_gMulSwd.MultiMode == 4) PG_PrintText("多路模式:1-4路"); + else if (g_gMulSwd.MultiMode == 1) + { + if (g_gMulSwd.SwitchPin == 0) PG_PrintText("1拖1,烧录第1路"); + else if (g_gMulSwd.SwitchPin == 1) PG_PrintText("1拖1,烧录第2路"); + else if (g_gMulSwd.SwitchPin == 2) PG_PrintText("1拖1,烧录第3路"); + else if (g_gMulSwd.SwitchPin == 3) PG_PrintText("1拖1,烧录第4路"); + } + else if (g_gMulSwd.MultiMode == 2) PG_PrintText("1拖2,烧录第1-2路"); + else if (g_gMulSwd.MultiMode == 3) PG_PrintText("1拖3,烧录第1-3路"); + else if (g_gMulSwd.MultiMode == 4) PG_PrintText("1拖4,烧录第1-4路"); } /* V1.36 解决第一次上电第1次烧录失败问题 */ @@ -367,6 +378,10 @@ void status_ProgWork(void) lua_if.c 中的钩子函数LuaYeildHook()实现长按S键终止lua执行。 界面的绘制由编程函数内部负责刷新 */ + g_gMulSwd.Error[0] = 0; + g_gMulSwd.Error[1] = 0; + g_gMulSwd.Error[2] = 0; + g_gMulSwd.Error[3] = 0; PG_PrintText("开始烧录..."); if (g_gMulSwd.MultiMode > 0) /* 多路模式 */ @@ -677,7 +692,7 @@ void status_ProgWork(void) } else { - g_MainStatus = MS_EXTEND_MENU1; + g_MainStatus = MS_EXTEND_MENU_PROG_MODE; } break; @@ -685,6 +700,37 @@ void status_ProgWork(void) break; } } + + /* PC控制烧录一次 */ + if (g_tVar.ReqProgOnce > 0) + { + /* 进入单路烧录模式, 不烧录 */ + if (g_tVar.ReqProgOnce == 1) + { + g_tVar.ReqProgOnce = 2; + g_MainStatus = MS_PROG_WORK; + return; /* 退出烧录状态,重新再进入一次烧录状态,自动装载一次lua文件 */ + } + else if (g_tVar.ReqProgOnce == 2) + { + g_tVar.ReqProgOnce = 0; + } + + /* 进入单路烧录模式,并烧录1次 */ + if (g_tVar.ReqProgOnce == 3) + { + g_tVar.ReqProgOnce = 4; + g_MainStatus = MS_PROG_WORK; + return; /* 退出烧录状态,重新再进入一次烧录状态,自动装载一次lua文件 */ + } + else if (g_tVar.ReqProgOnce == 4) + { + g_tVar.ReqProgOnce = 0; + /* 烧录一次 */ + g_tProg.AutoStart = 0; + fRunOnce = 1; + } + } } PERIOD_Start(&g_tRunLed, 1000, 1000, 0); /* LED一直闪烁, 每2秒闪1次 */ diff --git a/User/app/src/status_system_set.c b/User/app/src/status_system_set.c index 09f88c6..3c3acb5 100755 --- a/User/app/src/status_system_set.c +++ b/User/app/src/status_system_set.c @@ -55,7 +55,16 @@ void status_SystemSetMain(void) g_tMenuSys.Height = MENU_HEIGHT; g_tMenuSys.Width = MENU_WIDTH; g_tMenuSys.LineCap = MENU_CAP; - g_tMenuSys.ViewLine = 7; + + if (g_LcdHeight == 320) + { + g_tMenuSys.ViewLine = 8; + } + else + { + g_tMenuSys.ViewLine = 7; + } + g_tMenuSys.Font.FontCode = FC_ST_24; // g_tMenuSys.Font.FrontColor = CL_BLACK; /* 字体颜色 */ // g_tMenuSys.Font.BackColor = FORM_BACK_COLOR; /* 文字背景颜色 */ diff --git a/User/bsp/inc/bsp_key.h b/User/bsp/inc/bsp_key.h index f73cf6f..159527b 100755 --- a/User/bsp/inc/bsp_key.h +++ b/User/bsp/inc/bsp_key.h @@ -34,6 +34,8 @@ #define KEY_AUTO_C KEY_2_AUTO_UP #define KEY_DB_C KEY_2_DB_UP +#define KEY_WAKE_UP KEY_DB_S /* 用于唤醒屏幕背光 */ + /* 按键ID, 主要用于bsp_KeyState()函数的入口参数 */ typedef enum { diff --git a/User/bsp/inc/bsp_user_lib.h b/User/bsp/inc/bsp_user_lib.h index afa152c..9e3a35b 100755 --- a/User/bsp/inc/bsp_user_lib.h +++ b/User/bsp/inc/bsp_user_lib.h @@ -41,6 +41,7 @@ uint8_t TwoCharToInt(char *_ch); int str_to_int2(char *_pStr); int str_to_int3(char *_pStr); +int64_t str_to_int64(char *_pStr); uint8_t ip_str_decode(char *_ipstr, uint8_t *_out); uint16_t GetHigh16OfFloat(float _ff); diff --git a/User/bsp/src/bsp_emmc.c b/User/bsp/src/bsp_emmc.c index 7e3d953..e552f63 100755 --- a/User/bsp/src/bsp_emmc.c +++ b/User/bsp/src/bsp_emmc.c @@ -122,7 +122,7 @@ uint8_t BSP_MMC_Init(void) 200MHz / (2*2) = 50MHz 200MHz / (2*3) = 33MHz */ - uSdHandle.Init.ClockDiv = 3; /* 2019-12-13 2 -> 3 */ + uSdHandle.Init.ClockDiv = 4; /* 2019-12-13 2 -> 3 2021-03-22由3改为4*/ uSdHandle.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; uSdHandle.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; uSdHandle.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE; diff --git a/User/bsp/src/bsp_user_lib.c b/User/bsp/src/bsp_user_lib.c index f4e0cad..472ee34 100755 --- a/User/bsp/src/bsp_user_lib.c +++ b/User/bsp/src/bsp_user_lib.c @@ -954,6 +954,69 @@ int str_to_int3(char *_pStr) return ulInt; } +/* +********************************************************************************************************* +* 函 数 名: str_to_int64 +* 功能说明: 将ASCII码字符串转换成整数 (用于ini文件)。 遇到空格和TAB自动略过,遇到小数点和非0-9字符结束 +* 形 参: _pStr :待转换的ASCII码串,前面可以有空格和tab,结束是非0-9字符。 +* 返 回 值: 二进制整数值 +********************************************************************************************************* +*/ +int64_t str_to_int64(char *_pStr) +{ + unsigned char state = 0; + unsigned char flag = 0; + char *p; + int64_t ulInt; + unsigned char ucTemp; + + p = _pStr; + + ulInt = 0; + + while (1) + { + ucTemp = *p++; + + if (state == 0) + { + if (ucTemp == ' ' || ucTemp == '\t') + { + continue; + } + else + { + if (ucTemp == '-') + { + flag = 1; /* 是负数 */ + } + else + { + ulInt = ulInt * 10 + (ucTemp - '0'); + state = 1; + } + } + } + else if (state == 1) + { + if ((ucTemp >= '0') && (ucTemp <= '9')) + { + ulInt = ulInt * 10 + (ucTemp - '0'); + } + else + { + break; + } + } + } + + if (flag == 1) + { + return -ulInt; + } + return ulInt; +} + /* ********************************************************************************************************* * 函 数 名: ip_str_decode diff --git a/User/daplink/source/daplink/cmsis-dap/SW_DP.c b/User/daplink/source/daplink/cmsis-dap/SW_DP.c index fab8c44..499edf3 100755 --- a/User/daplink/source/daplink/cmsis-dap/SW_DP.c +++ b/User/daplink/source/daplink/cmsis-dap/SW_DP.c @@ -212,66 +212,13 @@ uint8_t SWD_TransferFast(uint32_t request, uint32_t *data) /* Read data */ /* armfly : 优化奇偶校验算法 */ val = 0U; - #if 0 - { - uint32_t buf[32]; - - // PD3 = CLK PD4 = DIO - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[0] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[1] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[2] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[3] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[4] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[5] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[6] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[7] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[8] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[9] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[10] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[11] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[12] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[13] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[14] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[15] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[16] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[17] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[18] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[19] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[20] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[21] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[22] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[23] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[24] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[25] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[26] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[27] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[28] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[29] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[30] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[31] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3; - - parity = 0; - for (n = 0; n < 32; n++) - { - val >>= 1; - if (buf[n] & GPIO_PIN_4) - { - val |= 0x80000000; - parity++; - } - } - //parity = GetParity(val); - } - #else for (n = 32U; n; n--) { SW_READ_BIT_FAST(bit); /* Read RDATA[0:31] */ val >>= 1; val |= bit << 31; - } - parity = GetParity(val); - #endif + } - + parity = GetParity(val); SW_READ_BIT_FAST(bit); /* Read Parity */ diff --git a/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.c b/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.c index a49dd75..4682f51 100644 --- a/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.c +++ b/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.c @@ -82,38 +82,73 @@ #define MUL_GPIO_SWD GPIOE #define MUL_GPIO_DIR GPIOG -#define MUL_PIN_SWCLK_1 GPIO_PIN_12 -#define MUL_PIN_SWDIO_1 GPIO_PIN_11 -#define MUL_PIN_DIR_1 GPIO_PIN_9 +#if 1 // 正确引脚 + #define MUL_PIN_SWCLK_1 GPIO_PIN_12 + #define MUL_PIN_SWDIO_1 GPIO_PIN_11 + #define MUL_PIN_DIR_1 GPIO_PIN_9 -#define MUL_PIN_SWCLK_2 GPIO_PIN_10 -#define MUL_PIN_SWDIO_2 GPIO_PIN_2 -#define MUL_PIN_DIR_2 GPIO_PIN_7 + #define MUL_PIN_SWCLK_2 GPIO_PIN_10 + #define MUL_PIN_SWDIO_2 GPIO_PIN_2 + #define MUL_PIN_DIR_2 GPIO_PIN_7 -#define MUL_PIN_SWCLK_3 GPIO_PIN_9 -#define MUL_PIN_SWDIO_3 GPIO_PIN_4 -#define MUL_PIN_DIR_3 GPIO_PIN_12 + #define MUL_PIN_SWCLK_3 GPIO_PIN_9 + #define MUL_PIN_SWDIO_3 GPIO_PIN_4 + #define MUL_PIN_DIR_3 GPIO_PIN_12 -#define MUL_PIN_SWCLK_4 GPIO_PIN_6 -#define MUL_PIN_SWDIO_4 GPIO_PIN_5 -#define MUL_PIN_DIR_4 GPIO_PIN_10 + #define MUL_PIN_SWCLK_4 GPIO_PIN_6 + #define MUL_PIN_SWDIO_4 GPIO_PIN_5 + #define MUL_PIN_DIR_4 GPIO_PIN_10 -/* pin bit */ -#define MUL_PINB_SWCLK_1 12 -#define MUL_PINB_SWDIO_1 11 -#define MUL_PINB_DIR_1 9 + /* pin bit */ + #define MUL_PINB_SWCLK_1 12 + #define MUL_PINB_SWDIO_1 11 + #define MUL_PINB_DIR_1 9 -#define MUL_PINB_SWCLK_2 10 -#define MUL_PINB_SWDIO_2 2 -#define MUL_PINB_DIR_2 7 + #define MUL_PINB_SWCLK_2 10 + #define MUL_PINB_SWDIO_2 2 + #define MUL_PINB_DIR_2 7 -#define MUL_PINB_SWCLK_3 9 -#define MUL_PINB_SWDIO_3 4 -#define MUL_PINB_DIR_3 12 + #define MUL_PINB_SWCLK_3 9 + #define MUL_PINB_SWDIO_3 4 + #define MUL_PINB_DIR_3 12 -#define MUL_PINB_SWCLK_4 6 -#define MUL_PINB_SWDIO_4 5 -#define MUL_PINB_DIR_4 10 + #define MUL_PINB_SWCLK_4 6 + #define MUL_PINB_SWDIO_4 5 + #define MUL_PINB_DIR_4 10 +#else // PORT1 he PORT2交换, 用于测试 + #define MUL_PIN_SWCLK_1 GPIO_PIN_10 //GPIO_PIN_12 + #define MUL_PIN_SWDIO_1 GPIO_PIN_2 //GPIO_PIN_11 + #define MUL_PIN_DIR_1 GPIO_PIN_7 //GPIO_PIN_9 + + #define MUL_PIN_SWCLK_2 GPIO_PIN_12 //GPIO_PIN_10 + #define MUL_PIN_SWDIO_2 GPIO_PIN_11 //GPIO_PIN_2 + #define MUL_PIN_DIR_2 GPIO_PIN_9 //GPIO_PIN_7 + + #define MUL_PIN_SWCLK_3 GPIO_PIN_9 + #define MUL_PIN_SWDIO_3 GPIO_PIN_4 + #define MUL_PIN_DIR_3 GPIO_PIN_12 + + #define MUL_PIN_SWCLK_4 GPIO_PIN_6 + #define MUL_PIN_SWDIO_4 GPIO_PIN_5 + #define MUL_PIN_DIR_4 GPIO_PIN_10 + + /* pin bit */ + #define MUL_PINB_SWCLK_1 10 //12 + #define MUL_PINB_SWDIO_1 2 //11 + #define MUL_PINB_DIR_1 7 //9 + + #define MUL_PINB_SWCLK_2 12 //10 + #define MUL_PINB_SWDIO_2 11 //2 + #define MUL_PINB_DIR_2 9 //7 + + #define MUL_PINB_SWCLK_3 9 + #define MUL_PINB_SWDIO_3 4 + #define MUL_PINB_DIR_3 12 + + #define MUL_PINB_SWCLK_4 6 + #define MUL_PINB_SWDIO_4 5 + #define MUL_PINB_DIR_4 10 +#endif /* GPIO_MODER寄存器 */ #define MUL_DIO_MODE_MASK_1 ~(3u << (MUL_PINB_SWDIO_1 * 2)) @@ -140,6 +175,16 @@ MUL_SWD_T g_gMulSwd = {0}; +const uint32_t TablePinDIR[4] = {MUL_PIN_DIR_1, MUL_PIN_DIR_2, MUL_PIN_DIR_3, MUL_PIN_DIR_4}; +const uint32_t TablePinSWClK[4] = {MUL_PIN_SWCLK_1, MUL_PIN_SWCLK_2, MUL_PIN_SWCLK_3, MUL_PIN_SWCLK_4}; +const uint32_t TablePinSWDIO[4] = {MUL_PIN_SWDIO_1, MUL_PIN_SWDIO_2, MUL_PIN_SWDIO_3, MUL_PIN_SWDIO_4}; + +const uint32_t TableModeMask[4] = {MUL_DIO_MODE_MASK_1, MUL_DIO_MODE_MASK_2, MUL_DIO_MODE_MASK_3, MUL_DIO_MODE_MASK_4}; +const uint32_t TableModeOut[4] = {MUL_DIO_MODE_OUT_1, MUL_DIO_MODE_OUT_2, MUL_DIO_MODE_OUT_3, MUL_DIO_MODE_OUT_4}; + +const uint32_t TableClk0Dio0[4] = {CLK_0_DIO_0_1, CLK_0_DIO_0_2, CLK_0_DIO_0_3, CLK_0_DIO_0_4}; +const uint32_t TableClk0Dio1[4] = {CLK_0_DIO_1_1, CLK_0_DIO_1_2, CLK_0_DIO_1_3, CLK_0_DIO_1_4}; + /* 4个SWDIO配置为输出 */ static __forceinline void MUL_PIN_SWDIO_OUT_ENABLE(void) { @@ -168,26 +213,35 @@ static __forceinline uint32_t MUL_PIN_SWDIO_IN(void) input = MUL_GPIO_SWD->IDR; - if (input & MUL_PIN_SWDIO_1) - { - ret += 0x00000001; + if (g_gMulSwd.MultiMode == 1) /* 多路模式只烧写一路 */ + { + if (input & TablePinSWDIO[g_gMulSwd.SwitchPin]) + { + ret += 0x00000001; + } } - - if (input & MUL_PIN_SWDIO_2) + else { - ret += 0x00000100; - } + if (input & MUL_PIN_SWDIO_1) + { + ret += 0x00000001; + } + + if (input & MUL_PIN_SWDIO_2) + { + ret += 0x00000100; + } if (input & MUL_PIN_SWDIO_3) { ret += 0x00010000; } - if (input & MUL_PIN_SWDIO_4) - { - ret += 0x01000000; - } - + if (input & MUL_PIN_SWDIO_4) + { + ret += 0x01000000; + } + } return ret; } @@ -243,8 +297,8 @@ static __forceinline void MUL_PIN_SWCLK_CLR(void) } static __forceinline void MUL_SEND_32BIT_FAST(uint32_t val) { - uint32_t CLK_0_DIO_1 = g_gMulSwd.CLK_0_DIO_1; - uint32_t CLK_0_DIO_0 = g_gMulSwd.CLK_0_DIO_0; + __IO uint32_t CLK_0_DIO_1 = g_gMulSwd.CLK_0_DIO_1; + __IO uint32_t CLK_0_DIO_0 = g_gMulSwd.CLK_0_DIO_0; MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST(); MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST();MUL_SEND_32BIT_ONCE_FAST(); @@ -270,8 +324,8 @@ static __forceinline void MUL_SEND_32BIT_FAST(uint32_t val) } static __forceinline void MUL_SEND_32BIT_SLOW(uint32_t val) { - uint32_t CLK_0_DIO_1 = g_gMulSwd.CLK_0_DIO_1; - uint32_t CLK_0_DIO_0 = g_gMulSwd.CLK_0_DIO_0; + __IO uint32_t CLK_0_DIO_1 = g_gMulSwd.CLK_0_DIO_1; + __IO uint32_t CLK_0_DIO_0 = g_gMulSwd.CLK_0_DIO_0; MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW(); MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW(); @@ -283,7 +337,27 @@ static __forceinline void MUL_SEND_32BIT_SLOW(uint32_t val) MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW();MUL_SEND_32BIT_ONCE_SLOW(); } -extern uint8_t GetParity(uint32_t data); +//extern uint8_t GetParity(uint32_t data); +static const uint8_t MUL_ParityTable256[256] = +{ +# define P2(n) n, n^1, n^1, n +# define P4(n) P2(n), P2(n^1), P2(n^1), P2(n) +# define P6(n) P4(n), P4(n^1), P4(n^1), P4(n) + P6(0), P6(1), P6(1), P6(0) +}; + +uint8_t MUL_GetParity(uint32_t data) +{ + uint8_t parity; + + data ^= data >> 16; + data ^= data >> 8; + + parity = MUL_ParityTable256[data & 0xff]; + + return parity; +} + /* ********************************************************************************************************* @@ -298,26 +372,52 @@ void MUL_SWD_GPIOConfig(void) EIO_D0_Config(ES_GPIO_OUT); /* reset */ EIO_D1_Config(ES_GPIO_IN); /* 输入 */ - if (g_gMulSwd.Active[0] == 1) - { - EIO_D8_Config(ES_GPIO_SWD_OUT); /* 用FMC口线做GPIO。因此FMC功能失效 */ - EIO_D9_Config(ES_GPIO_SWD_OUT); /* 用FMC口线做GPIO。因此FMC功能失效 */ + if (g_gMulSwd.MultiMode == 1) /* 多路模式只烧写一路 */ + { + if (g_gMulSwd.SwitchPin == 0) + { + EIO_D8_Config(ES_GPIO_SWD_OUT); + EIO_D9_Config(ES_GPIO_SWD_OUT); + } + else if (g_gMulSwd.SwitchPin == 1) + { + EIO_D5_Config(ES_GPIO_OUT); + EIO_D7_Config(ES_GPIO_SWD_OUT); + } + else if (g_gMulSwd.SwitchPin == 2) + { + EIO_D4_Config(ES_GPIO_OUT); + EIO_D6_Config(ES_GPIO_SWD_OUT); + } + else if (g_gMulSwd.SwitchPin == 3) + { + EIO_D2_Config(ES_GPIO_OUT); + EIO_D3_Config(ES_GPIO_OUT); + } } - if (g_gMulSwd.Active[1] == 1) + else { - EIO_D5_Config(ES_GPIO_OUT); - EIO_D7_Config(ES_GPIO_SWD_OUT); /* 用FMC口线做GPIO。因此FMC功能失效 */ + if (g_gMulSwd.Active[0] == 1) + { + EIO_D8_Config(ES_GPIO_SWD_OUT); + EIO_D9_Config(ES_GPIO_SWD_OUT); + } + if (g_gMulSwd.Active[1] == 1) + { + EIO_D5_Config(ES_GPIO_OUT); + EIO_D7_Config(ES_GPIO_SWD_OUT); + } + if (g_gMulSwd.Active[2] == 1) + { + EIO_D4_Config(ES_GPIO_OUT); + EIO_D6_Config(ES_GPIO_SWD_OUT); + } + if (g_gMulSwd.Active[3] == 1) + { + EIO_D2_Config(ES_GPIO_OUT); + EIO_D3_Config(ES_GPIO_OUT); + } } - if (g_gMulSwd.Active[2] == 1) - { - EIO_D4_Config(ES_GPIO_OUT); - EIO_D6_Config(ES_GPIO_SWD_OUT); /* 用FMC口线做GPIO。因此FMC功能失效 */ - } - if (g_gMulSwd.Active[3] == 1) - { - EIO_D2_Config(ES_GPIO_OUT); - EIO_D3_Config(ES_GPIO_OUT); - } } /* @@ -351,15 +451,6 @@ void MUL_PORT_SWD_SETUP(void) * 返 回 值: 无 ********************************************************************************************************* */ -const uint32_t TablePinDIR[4] = {MUL_PIN_DIR_1, MUL_PIN_DIR_2, MUL_PIN_DIR_3, MUL_PIN_DIR_4}; -const uint32_t TablePinSWClK[4] = {MUL_PIN_SWCLK_1, MUL_PIN_SWCLK_2, MUL_PIN_SWCLK_3, MUL_PIN_SWCLK_4}; -const uint32_t TablePinSWDIO[4] = {MUL_PIN_SWDIO_1, MUL_PIN_SWDIO_2, MUL_PIN_SWDIO_3, MUL_PIN_SWDIO_4}; - -const uint32_t TableModeMask[4] = {MUL_DIO_MODE_MASK_1, MUL_DIO_MODE_MASK_2, MUL_DIO_MODE_MASK_3, MUL_DIO_MODE_MASK_4}; -const uint32_t TableModeOut[4] = {MUL_DIO_MODE_OUT_1, MUL_DIO_MODE_OUT_2, MUL_DIO_MODE_OUT_3, MUL_DIO_MODE_OUT_4}; - -const uint32_t TableClk0Dio0[4] = {CLK_0_DIO_0_1, CLK_0_DIO_0_2, CLK_0_DIO_0_3, CLK_0_DIO_0_4}; -const uint32_t TableClk0Dio1[4] = {CLK_0_DIO_1_1, CLK_0_DIO_1_2, CLK_0_DIO_1_3, CLK_0_DIO_1_4}; void MUL_RefreshGpioParam(void) { @@ -372,9 +463,11 @@ void MUL_RefreshGpioParam(void) uint32_t CLK_0_DIO_1 = 0; uint8_t i; - for (i = 0; i < 4; i++) + if (g_gMulSwd.MultiMode == 1) /* 烧写1路 */ { - if (g_gMulSwd.Active[i] == 1 && g_gMulSwd.Ignore[i] == 0 && g_gMulSwd.TempIgnore[i] == 0) + i = g_gMulSwd.SwitchPin; /* 硬件端口可切换到1-4中任意一路 */ + + if (g_gMulSwd.Active[0] == 1 && g_gMulSwd.Ignore[0] == 0 && g_gMulSwd.TempIgnore[0] == 0) { DIR_Pins |= TablePinDIR[i]; SWCLK_Pins |= TablePinSWClK[i]; @@ -384,14 +477,37 @@ void MUL_RefreshGpioParam(void) CLK_0_DIO_0 |= TableClk0Dio0[i]; CLK_0_DIO_1 |= TableClk0Dio1[i]; } + g_gMulSwd.DIR_Pins = DIR_Pins; + g_gMulSwd.SWCLK_Pins = SWCLK_Pins; + g_gMulSwd.SWDIO_Pins = SWDIO_Pins; + g_gMulSwd.MODER_Mask = MODER_Mask; + g_gMulSwd.MODER_Out = MODER_Out; + g_gMulSwd.CLK_0_DIO_0 = CLK_0_DIO_0; + g_gMulSwd.CLK_0_DIO_1 = CLK_0_DIO_1; + } + else + { + for (i = 0; i < 4; i++) + { + if (g_gMulSwd.Active[i] == 1 && g_gMulSwd.Ignore[i] == 0 && g_gMulSwd.TempIgnore[i] == 0) + { + DIR_Pins |= TablePinDIR[i]; + SWCLK_Pins |= TablePinSWClK[i]; + SWDIO_Pins |= TablePinSWDIO[i]; + MODER_Mask &= TableModeMask[i]; + MODER_Out |= TableModeOut[i]; + CLK_0_DIO_0 |= TableClk0Dio0[i]; + CLK_0_DIO_1 |= TableClk0Dio1[i]; + } + } + g_gMulSwd.DIR_Pins = DIR_Pins; + g_gMulSwd.SWCLK_Pins = SWCLK_Pins; + g_gMulSwd.SWDIO_Pins = SWDIO_Pins; + g_gMulSwd.MODER_Mask = MODER_Mask; + g_gMulSwd.MODER_Out = MODER_Out; + g_gMulSwd.CLK_0_DIO_0 = CLK_0_DIO_0; + g_gMulSwd.CLK_0_DIO_1 = CLK_0_DIO_1; } - g_gMulSwd.DIR_Pins = DIR_Pins; - g_gMulSwd.SWCLK_Pins = SWCLK_Pins; - g_gMulSwd.SWDIO_Pins = SWDIO_Pins; - g_gMulSwd.MODER_Mask = MODER_Mask; - g_gMulSwd.MODER_Out = MODER_Out; - g_gMulSwd.CLK_0_DIO_0 = CLK_0_DIO_0; - g_gMulSwd.CLK_0_DIO_1 = CLK_0_DIO_1; } /* @@ -512,7 +628,7 @@ uint8_t* MUL_SWD_TransferFast(uint32_t request, uint32_t *data) for (i = 0; i < 4; i++) { - pb_buf[i] = GetParity(val_buf[i]); + pb_buf[i] = MUL_GetParity(val_buf[i]); } MUL_SW_READ_BIT_FAST(bit); /* Read Parity */ @@ -556,7 +672,7 @@ uint8_t* MUL_SWD_TransferFast(uint32_t request, uint32_t *data) val = *data; /* armfly : 优化奇偶校验算法 */ - pb = GetParity(val); + pb = MUL_GetParity(val); MUL_SEND_32BIT_FAST(val); MUL_SW_WRITE_BIT_FAST(pb); /* Write Parity Bit */ @@ -777,7 +893,7 @@ uint8_t* MUL_SWD_TransferSlow(uint32_t request, uint32_t *data) for (i = 0; i < 4; i++) { - pb_buf[i] = GetParity(val_buf[i]); + pb_buf[i] = MUL_GetParity(val_buf[i]); } MUL_SW_READ_BIT_SLOW(bit); /* Read Parity */ @@ -821,7 +937,7 @@ uint8_t* MUL_SWD_TransferSlow(uint32_t request, uint32_t *data) val = *data; /* armfly : 优化奇偶校验算法 */ - pb = GetParity(val); + pb = MUL_GetParity(val); MUL_SEND_32BIT_SLOW(val); MUL_SW_WRITE_BIT_SLOW(pb); /* Write Parity Bit */ diff --git a/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.h b/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.h index 81b7f3e..acf5bd5 100644 --- a/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.h +++ b/User/daplink/source/daplink/cmsis-dap/SW_DP_Multi.h @@ -37,6 +37,8 @@ typedef struct uint32_t CoreID[4]; + uint8_t SwitchPin; /* 0: 1拖1第1路模式,1:1拖1第2路 */ + }MUL_SWD_T; extern MUL_SWD_T g_gMulSwd; diff --git a/User/daplink/source/daplink/interface/swd_host.c b/User/daplink/source/daplink/interface/swd_host.c index fcdc90f..7305b0d 100755 --- a/User/daplink/source/daplink/interface/swd_host.c +++ b/User/daplink/source/daplink/interface/swd_host.c @@ -963,14 +963,14 @@ static uint8_t JTAG2SWD() return 0; } - /* 旧协议,J-LINK如此发送 */ - if (!swd_switch(0xEDB6)) { - return 0; - } +// /* 旧协议,J-LINK如此发送 */ +// if (!swd_switch(0xEDB6)) { +// return 0; +// } - if (!swd_reset()) { - return 0; - } +// if (!swd_reset()) { +// return 0; +// } if (!swd_read_idcode(&tmp)) { return 0; @@ -995,14 +995,14 @@ static uint8_t JTAG2SWD_2(uint32_t *tmp) return 0; } - /* 旧协议,J-LINK如此发送 */ - if (!swd_switch(0xEDB6)) { - return 0; - } +// /* 旧协议,J-LINK如此发送 */ +// if (!swd_switch(0xEDB6)) { +// return 0; +// } - if (!swd_reset()) { - return 0; - } +// if (!swd_reset()) { +// return 0; +// } if (!swd_read_idcode(tmp)) { return 0; @@ -1748,9 +1748,20 @@ uint8_t swd_enter_debug_program(void) return 0; } - if (!swd_write_word(NVIC_AIRCR, VECTKEY | (val & SCB_AIRCR_PRIGROUP_Msk) | soft_reset)) { - printf("error: swd_write_word(NVIC_AIRCR, VECTKEY | (val & SCB_AIRCR_PRIGROUP_Msk) | soft_reset)\r\n"); - return 0; + if (!swd_write_word(NVIC_AIRCR, VECTKEY | (val & SCB_AIRCR_PRIGROUP_Msk) | soft_reset)) + { + printf("not surport: NVIC_AIRCR soft_reset\r\n"); + + /* 2021-03-20 国民技术 N32G455, 执行软件复位会返回异常 */ + //return 0; + + { + uint32_t id; + swd_reset(); + if (!swd_read_idcode(&id)) { + return 0; + } + } } osDelay(2); diff --git a/User/daplink/source/daplink/interface/swd_host_multi.c b/User/daplink/source/daplink/interface/swd_host_multi.c index dc95e5d..62cf5b5 100644 --- a/User/daplink/source/daplink/interface/swd_host_multi.c +++ b/User/daplink/source/daplink/interface/swd_host_multi.c @@ -1270,40 +1270,36 @@ static uint8_t MUL_swd_wait_until_halted(void) float percent; tt = bsp_CheckRunTime(time1); - if (tt0 != tt) + if (tt > g_tProg.FLMFuncTimeout + addtime) { - tt0 = tt; - if (tt > g_tProg.FLMFuncTimeout + addtime) + uint8_t i; + + printf("error : swd_wait_until_halted() timeout\r\n"); + for (i = 0; i < 4; i++) { - uint8_t i; - - printf("error : swd_wait_until_halted() timeout\r\n"); - for (i = 0; i < 4; i++) - { - if (g_gMulSwd.Active[i] == 1) - { - if (ok[i] == 0) - { - g_gMulSwd.Error[i] = 1; - } - } - } - break; /* 超时退出 */ - } - else - { - if (g_tProg.FLMFuncDispProgress == 1) - { - /* 250ms打印1次 */ - if ((tt % 250) == 0) + if (g_gMulSwd.Active[i] == 1) + { + if (ok[i] == 0) { - percent = ((float)tt / g_tProg.FLMFuncTimeout) * 100; - PG_PrintPercent(percent, g_tProg.FLMFuncDispAddr); + g_gMulSwd.Error[i] = 1; } - bsp_Idle(); } + } + break; /* 超时退出 */ + } + + if (g_tProg.FLMFuncDispProgress == 1) + { + /* 250ms打印1次 */ + if (bsp_CheckRunTime(tt0) >= 250) + { + tt0 = bsp_GetRunTime(); + + percent = ((float)tt / g_tProg.FLMFuncTimeout) * 100; + PG_PrintPercent(percent, g_tProg.FLMFuncDispAddr); } - } + bsp_Idle(); + } } if (!MUL_swd_read_word(DBG_HCSR, val)) @@ -2254,6 +2250,419 @@ uint8_t MUL_swd_set_target_state_sw(TARGET_RESET_STATE state) ********************************************************************************************************* */ extern uint8_t swd_freeze_dog(void); + +uint8_t MUL_swd_enter_debug_program_sw(void) +{ + uint32_t val[4]; + uint32_t i; + + if (!MUL_swd_init_debug()) { + printf("ERROR:1010 MUL_swd_init_debug()\r\n"); + return 0; + } + + if (swd_freeze_dog() == 0) /* 如果冻结看门狗时钟失败(STM32H7)*/ + { + if (swd_freeze_dog() == 0) + { + /* 失败 */; + } + } + + + // Enable debug and halt the core (DHCSR <- 0xA05F0003) + for (i = 0; i < 5; i++) + { + if (MUL_swd_write_word(DBG_HCSR, DBGKEY | C_DEBUGEN | C_HALT) != 0) + { + break; + } + + // Target is in invalid state? + MUL_swd_set_target_reset(1); + osDelay(20); + MUL_swd_set_target_reset(0); + osDelay(i * 5); + } + + + // Wait until core is halted + for (i = 0; i < 500; i++) + { + uint8_t err; + + if (!MUL_swd_read_word(DBG_HCSR, val)) + { + printf("ERROR:1011 MUL_swd_read_word(DBG_HCSR, val)\r\n"); + goto err_quit; + } + + err = 0; + if (g_gMulSwd.Active[0] == 1 && ((val[0] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[1] == 1 && ((val[1] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[2] == 1 && ((val[2] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[3] == 1 && ((val[3] & S_HALT) == 0)) + { + err = 1; + } + if (err == 0) + { + break; + } + + bsp_DelayUS(100); + } + + // Enable halt on reset + if (!MUL_swd_write_word(DBG_EMCR, VC_CORERESET)) { + printf("ERROR:1012 MUL_swd_write_word(DBG_EMCR, VC_CORERESET)\r\n"); + goto err_quit; + } + + // Perform a soft reset + if (!MUL_swd_read_word(NVIC_AIRCR, val)) { + printf("ERROR:1013 MUL_swd_read_word(NVIC_AIRCR, val)\r\n"); + goto err_quit; + } + + if (!MUL_swd_write_word(NVIC_AIRCR, VECTKEY | (val[0] & SCB_AIRCR_PRIGROUP_Msk) | soft_reset)) { + //printf("ERROR:1014 MUL_swd_write_word(NVIC_AIRCR, VECTKEY | (val[0] & SCB_AIRCR_PRIGROUP_Msk) | soft_reset)\r\n"); + + printf("not surport: NVIC_AIRCR soft_reset\r\n"); + + /* 2021-03-20 国民技术 N32G455, 执行软件复位会返回异常 */ + //return 0; + + { + uint32_t id[4]; + MUL_swd_reset(); + if (!MUL_swd_read_idcode(id)) { + goto err_quit; + } + + /* 需要清除错误标志 */ + g_gMulSwd.Error[0] = 0; + g_gMulSwd.Error[1] = 0; + g_gMulSwd.Error[2] = 0; + g_gMulSwd.Error[3] = 0; + } + } + + osDelay(2); + + for (i = 0; i < 500; i++) + { + uint8_t err; + + if (!MUL_swd_read_word(DBG_HCSR, val)) + { + printf("ERROR:1015 MUL_swd_read_word(DBG_HCSR, val)\r\n"); + goto err_quit; + } + + err = 0; + if (g_gMulSwd.Active[0] == 1 && ((val[0] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[1] == 1 && ((val[1] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[2] == 1 && ((val[2] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[3] == 1 && ((val[3] & S_HALT) == 0)) + { + err = 1; + } + if (err == 0) + { + break; + } + + bsp_DelayUS(100); + } + // Disable halt on reset + if (!MUL_swd_write_word(DBG_EMCR, 0)) { + printf("ERROR:1016 MUL_swd_write_word(DBG_EMCR, 0)\r\n"); + goto err_quit; + } + + /* 解锁后重读 NVIC_CPUID */ + { + uint32_t cpuid[4]; + + /* NVIC_CPUID = 0xE000ED00 */ + if (!MUL_swd_read_word(NVIC_CPUID, cpuid)) + { + printf("ERROR:1017 MUL_swd_read_word(NVIC_CPUID, cpuid) error\r\n"); + goto err_quit; + } + + if (g_gMulSwd.MultiMode >= 1) + { + printf(".NVIC_CPUID1 = %08X, %s\r\n", cpuid[0], swd_arm_core_info(cpuid[0])); + } + if (g_gMulSwd.MultiMode >= 2) + { + printf(".NVIC_CPUID2 = %08X, %s\r\n", cpuid[1], swd_arm_core_info(cpuid[1])); + } + if (g_gMulSwd.MultiMode >= 3) + { + printf(".NVIC_CPUID3 = %08X, %s\r\n", cpuid[2], swd_arm_core_info(cpuid[2])); + } + if (g_gMulSwd.MultiMode >= 4) + { + printf(".NVIC_CPUID4 = %08X, %s\r\n", cpuid[3], swd_arm_core_info(cpuid[3])); + } + { + uint8_t err = 0; + + for (i = 0; i < 4; i++) + { + if (g_gMulSwd.Active[i] == 1) + { + if ((cpuid[i] & 0xFF000000) != 0x41000000) + { + err = 1; + } + } + } + + if (err == 1) + { + ; + } + } + } + return 1; + +err_quit: + return 0; +} + +uint8_t MUL_swd_enter_debug_program_hw(void) +{ + uint32_t val[4]; + uint32_t i; + + /* 进入编程状态,先复位一次,应对已看门狗低功耗程序的片子 */ + MUL_swd_set_target_reset(1); + osDelay(10); + MUL_swd_set_target_reset(0); + + if (MUL_swd_init_debug() == 0) + { + printf("ERROR:1018 MUL_swd_init_debug()\r\n"); + return 0; + } + + osDelay(5); + + #if 1 + if (swd_freeze_dog() == 0) /* 如果冻结看门狗时钟失败(STM32H7)*/ + { + if (MUL_swd_get_target_reset() == 0) + { + MUL_swd_set_target_reset(1); /* 硬件复位 */ + osDelay(g_tProg.SwdResetDelay); + } + + if (MUL_swd_init_debug() == 0) + { + printf("ERROR:1019 MUL_swd_init_debug()\r\n"); + return 0; + } + + if (swd_freeze_dog() == 0) + { + /* 失败 */; + } + } + #endif + + // Enable debug and halt the core (DHCSR <- 0xA05F0003) + for (i = 0; i < 10; i++) + { + if (MUL_swd_write_word(DBG_HCSR, DBGKEY | C_DEBUGEN | C_HALT) != 0) + { + break; + } + // Target is in invalid state? + MUL_swd_set_target_reset(1); + osDelay(20); + MUL_swd_set_target_reset(0); + osDelay(i * 5); + } + if (i == 10) + { + printf("ERROR:1020 MUL_swd_write_word(DBG_HCSR, DBGKEY | C_DEBUGEN | C_HALT)\r\n"); + return 0; + } + + // Enable halt on reset + if (!MUL_swd_write_word(DBG_EMCR, VC_CORERESET)) { + printf("ERROR:1021 MUL_swd_write_word(DBG_EMCR, VC_CORERESET)\r\n"); + return 0; /* 超时 */ + } + + MUL_swd_read_word(DBG_HCSR, val); + if ((val[0] & S_HALT) == 0) + { + if (MUL_swd_get_target_reset() == 0) + { + MUL_swd_set_target_reset(1); /* 硬件复位 */ + osDelay(20); + } + + if (MUL_swd_get_target_reset() == 1) + { + MUL_swd_set_target_reset(0); /* 退出硬件复位 */ + osDelay(g_tProg.SwdResetDelay); + } + } + + // Wait until core is halted + for (i = 0; i < 1000; i++) + { + uint8_t err; + + if (!MUL_swd_read_word(DBG_HCSR, val)) + { + printf("ERROR:1022 MUL_swd_read_word(DBG_HCSR, val)\r\n"); + return 0; + } + + err = 0; + if (g_gMulSwd.Active[0] == 1 && ((val[0] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[1] == 1 && ((val[1] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[2] == 1 && ((val[2] & S_HALT) == 0)) + { + err = 1; + } + if (g_gMulSwd.Active[3] == 1 && ((val[3] & S_HALT) == 0)) + { + err = 1; + } + + if (err == 0) + { + break; + } + + bsp_DelayUS(1000); + } + if (i == 1000) + { + printf("ERROR:1023 MUL_swd_read_word(DBG_HCSR, val)\r\n"); + return 0; + } + + // Disable halt on reset + if (!MUL_swd_write_word(DBG_EMCR, 0)) + { + printf("error 7: MUL_swd_write_word(DBG_EMCR, 0)\r\n"); + return 0; + } + + /* 解锁后重读 NVIC_CPUID */ + { + uint32_t cpuid[4]; + + /* NVIC_CPUID = 0xE000ED00 */ + if (!MUL_swd_read_word(NVIC_CPUID, cpuid)) + { + printf("ERROR:1024 .MUL_swd_read_word(NVIC_CPUID, cpuid) error\r\n"); + return 0; + } + + if (g_gMulSwd.MultiMode >= 1) + { + printf(".NVIC_CPUID1 = %08X, %s\r\n", cpuid[0], swd_arm_core_info(cpuid[0])); + } + if (g_gMulSwd.MultiMode >= 2) + { + printf(".NVIC_CPUID2 = %08X, %s\r\n", cpuid[1], swd_arm_core_info(cpuid[1])); + } + if (g_gMulSwd.MultiMode >= 3) + { + printf(".NVIC_CPUID3 = %08X, %s\r\n", cpuid[2], swd_arm_core_info(cpuid[2])); + } + if (g_gMulSwd.MultiMode >= 4) + { + printf(".NVIC_CPUID4 = %08X, %s\r\n", cpuid[3], swd_arm_core_info(cpuid[3])); + } + { + uint8_t err = 0; + + for (i = 0; i < 4; i++) + { + if (g_gMulSwd.Active[i] == 1) + { + if ((cpuid[i] & 0xFF000000) != 0x41000000) + { + err = 1; + } + } + } + + if (err == 1) + { + ; + } + } + } + return 1; +} + +uint8_t MUL_swd_enter_debug_program(void) +{ + uint8_t ResetMode; + + /* --0:自动模式, 1:软件模式 2:硬件UnderReset */ + ResetMode = g_tProg.ResetMode; + + /* 自动模式暂未实现 */ + if (ResetMode == 0) + { + ResetMode = 1; + } + + /* 软件复位 */ + if (ResetMode == 1) + { + return MUL_swd_enter_debug_program_sw(); + } + + /* 硬件复位 */ + if (ResetMode == 2) + { + return MUL_swd_enter_debug_program_hw(); + } + + return 0; +} +#endif + + +#if 0 // 临时备份下代码 uint8_t MUL_swd_enter_debug_program(void) { uint32_t val[4]; diff --git a/User/lua/if/lua_if.c b/User/lua/if/lua_if.c index 30fb46f..4505862 100755 --- a/User/lua/if/lua_if.c +++ b/User/lua/if/lua_if.c @@ -306,8 +306,7 @@ void lua_do(char *buf) } else /* 程序语法或执行错误 */ { - printf(str); - printf("\r\n"); + printf("%s\r\n", str); } lua_pop(g_Lua, 1); //将错误信息出栈 } diff --git a/User/lua/if/lua_if_swd.c b/User/lua/if/lua_if_swd.c index e8d1dd1..b848b33 100755 --- a/User/lua/if/lua_if_swd.c +++ b/User/lua/if/lua_if_swd.c @@ -205,7 +205,11 @@ static int h7_ReadCVar(lua_State* L) else if (strcmp(pVarName, "FactoryId") == 0) { lua_pushnumber(L, g_tParam.FactoryId); - } + } + else if (strcmp(pVarName, "MultiProgSwitchPin") == 0) + { + lua_pushnumber(L, g_gMulSwd.SwitchPin); + } else { lua_pushnumber(L, 0); /* 出错 */ @@ -456,6 +460,11 @@ static int h7swd_ReadMemory(lua_State* L) memset(s_lua_read_buf, 0, num); } + else + { + lua_pushnumber(L, 0); /* 出错 */ + return 1; + } if (num > LUA_READ_LEN_MAX) { @@ -1606,8 +1615,7 @@ static int h7_PrintText(lua_State* L) if (g_MainStatus == MS_PROG_WORK) { - printf(str); - printf("\r\n"); + printf("%s\r\n", str); if (g_MainStatus == MS_PROG_WORK) { @@ -1768,21 +1776,24 @@ static int h7_ProgBuf_OB(lua_State* L) { if (len > 0) { - DataBuf2[len++] = ~DataBuf2[len - 1]; + DataBuf2[len] = ~DataBuf2[len - 1]; + len++; } } else if (Address == 0xFFFFFFFE) /* 遇到0xFFFFFFFE,则插入前第2个数据取反的数据 */ { if (len >= 2) { - DataBuf2[len++] = ~DataBuf2[len - 2]; + DataBuf2[len] = ~DataBuf2[len - 2]; + len++; } } else if (Address == 0xFFFFFFFD) /* 遇到0xFFFFFFFD,则插入前第4个数据取反的数据 */ { if (len >= 4) { - DataBuf2[len++] = ~DataBuf2[len - 4]; + DataBuf2[len] = ~DataBuf2[len - 4]; + len++; } } else @@ -2082,10 +2093,18 @@ static int h7_EraseChip(lua_State* L) lua_pushnumber(L, 1); /* 成功 */ } } - else + else if (g_tProg.ChipType == CHIP_SPI_FLASH) { - lua_pushnumber(L, 0); /* 出错 */ - } + if (W25Q_EraseChip() == 0) + { + lua_pushnumber(L, 0); /* 出错 */ + } + else + { + lua_pushnumber(L, 1); /* 成功 */ + } + } + return 1; } @@ -2176,7 +2195,7 @@ static int h7_Read_ProductSN(lua_State* L) */ static int h7_Write_ProductSN(lua_State* L) { - uint32_t sn; + int64_t sn; if (lua_type(L, 1) == LUA_TNUMBER) /* 判断第1个参数 */ { diff --git a/User/modbus/modbus_reg_addr.h b/User/modbus/modbus_reg_addr.h index 2863fd7..16510e0 100755 --- a/User/modbus/modbus_reg_addr.h +++ b/User/modbus/modbus_reg_addr.h @@ -394,7 +394,12 @@ AI : 示波器 CH1 均值, mV单位 #define JUMP_TO_EMMC 4 #define JUMP_TO_LINK 5 #define JUMP_TO_UPDATE_BOOT 6 /* 更新boot */ - + + #define JUMP_TO_PROGRAMMER_NOT_DO 7 /* 进入单路烧录模式, 不烧录 */ + #define JUMP_TO_PROGRAMMER_DO_ONCE 8 /* 进入单路烧录模式,并烧录1次 */ + #define JUMP_TO_USB_UART 9 + #define JUMP_TO_USB_ESP32 10 + #define JUMP_TO_RTT_VIEWER 11 /* BOOT 程序用的寄存器 */ #define REG03_BOOT_CPU_ID0 0xFF80 diff --git a/User/modbus/modbus_register.c b/User/modbus/modbus_register.c index e7f6ce1..9c79e26 100755 --- a/User/modbus/modbus_register.c +++ b/User/modbus/modbus_register.c @@ -1533,6 +1533,36 @@ uint8_t WriteRegValue_06H(uint16_t reg_addr, uint16_t reg_value) g_tVar.ReqWriteBoot = 1; g_MainStatus = MS_FILE_MANAGE; } + else if (reg_value == JUMP_TO_PROGRAMMER_NOT_DO) /* 进入脱机烧录界面, 不执行烧录。 传送文件时执行 */ + { + if (g_MainStatus == MS_PROG_WORK) + { + g_tVar.ReqProgOnce = 1; /* 已经在烧录状态, 则重载lua文件后烧录一次 */ + } + else + { + g_tVar.ReqProgOnce = 2; /* 其他状态时,进入新状态后会自动重载 */ + } + + g_MainStatus = MS_PROG_WORK; + + bsp_PutKey(KEY_WAKE_UP); /* 任意发一个本状态无用的按键消息,重开背光 */ + } + else if (reg_value == JUMP_TO_PROGRAMMER_DO_ONCE) /* 进入脱机烧录界面,并烧录1次 */ + { + if (g_MainStatus == MS_PROG_WORK) + { + g_tVar.ReqProgOnce = 3; /* 已经在烧录状态, 则重载lua文件后烧录一次 */ + } + else + { + g_tVar.ReqProgOnce = 4; /* 其他状态时,进入新状态后会自动重载 */ + } + + g_MainStatus = MS_PROG_WORK; + + bsp_PutKey(KEY_WAKE_UP); /* 任意发一个本状态无用的按键消息,重开背光 */ + } break; /**************************** 时钟参数 *****************************/ diff --git a/User/modbus/modbus_slave.h b/User/modbus/modbus_slave.h index 340bae5..2c5796a 100755 --- a/User/modbus/modbus_slave.h +++ b/User/modbus/modbus_slave.h @@ -44,6 +44,17 @@ typedef struct uint8_t TCP_Flag; } MODS_T; +/* 66H帧子功能码定义 */ +enum +{ + H66_READ_MEM_INIT = 0, /* 读内存, */ + H66_READ_MEM = 1, /* 写内存 */ + H66_WRITE_MEM = 2, /* 写内存 */ + H66_WRITE_PROG_AUTO_INI = 3, /* 更改脱机烧录缺省启动文件(用于PC在线烧录) */ + + H66_READ_DISP_MEM = 0x0100, /* 读显存 */ +}; + void uart_rx_isr(void); /* 在 stm8s_it.c 中调用 */ uint8_t AnalyzeCmd(uint8_t *_DispBuf); uint8_t MODS_Poll(uint8_t *_buf, uint16_t _len); diff --git a/User/modbus/modbus_swd.c b/User/modbus/modbus_swd.c index 4ceec2f..e69182b 100644 --- a/User/modbus/modbus_swd.c +++ b/User/modbus/modbus_swd.c @@ -29,20 +29,12 @@ #include "stm8_swim.h" #include "n76e003_flash.h" #include "w25q_flash.h" - -/* 66H帧子功能码定义 */ -enum -{ - H66_READ_MEM_INIT = 0, /* 读内存, */ - H66_READ_MEM = 1, /* 写内存 */ - H66_WRITE_MEM = 2, /* 写内存 */ - - H66_READ_DISP_MEM = 0x0100, /* 读显存 */ -}; +#include "file_lib.h" static void MODS66_ReadMem(void); static void MODS66_WriteMem(void); static void MODS66_ReadDispMem(void); +static void MODS66_WriteProgAutoIni(void); /* ********************************************************************************************************* @@ -94,6 +86,10 @@ void MODS_66H(void) { MODS66_WriteMem(); } + else if (func == H66_WRITE_PROG_AUTO_INI) + { + MODS66_WriteProgAutoIni(); + } else if (func == H66_READ_DISP_MEM) { MODS66_ReadDispMem(); @@ -295,7 +291,8 @@ static void MODS66_WriteMem(void) 0001 ; 子功能, - 0表示读内存(需要初始化pg_init()) - 1表示读内存 (连续读,无需初始化) - - 2 写 + - 2表示写内存 + - 0x0100, 读显存 0000 0000 : 偏移地址 4字节 0020 0000 : 数据长度 4字节 ... 数据 @@ -398,6 +395,84 @@ static void MODS66_WriteMem(void) } } +/* +********************************************************************************************************* +* 函 数 名: MODS66_WriteProgAutoIni +* 功能说明: 写脱机烧录启动ini文件 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +static void MODS66_WriteProgAutoIni(void) +{ + /* + 主机发送: 小程序数据 + 01 ; 站号 + 66 ; 功能码 + 0001 ; 子功能, + - 0表示读内存(需要初始化pg_init()) + - 1表示读内存 (连续读,无需初始化) + - 2表示写内存 + - 3写脱机烧录启动文件 + - 0x0100, 读显存 + 0000 0000 : 偏移地址 4字节 + 0020 0000 : 数据长度 4字节 + ... 数据 + CCCC : CRC16 + + 从机应答: + 01 ; 从机地址 + 66 ; 功能码 + 0000 ; 子功能 + 0000 0000 : 偏移地址 4字节 + 0020 0000 : 数据长度 4字节 + + 00 ; 执行结果,0表示OK 1表示错误 + CCCC : CRC16 + */ + uint16_t func; /* 子功能代码 */ + uint32_t offset_addr; + uint32_t package_len; /* 本包数据长度 - 文件名长度+1 */ + //uint8_t ch_num; + uint8_t *pData; + uint8_t err; + + func = BEBufToUint16(&g_tModS.RxBuf[2]); + offset_addr = BEBufToUint32(&g_tModS.RxBuf[4]); + package_len = BEBufToUint32(&g_tModS.RxBuf[8]); + + pData = (uint8_t *)&g_tModS.RxBuf[12]; + + if (package_len > 12 && package_len < 256) + { + SaveProgAutorunFile((const char *)pData); + err = 0; + } + else + { + err = 1; + } + + /* 应答数据 */ + g_tModS.TxCount = 0; + g_tModS.TxBuf[g_tModS.TxCount++] = g_tParam.Addr485; /* 本机地址 */ + g_tModS.TxBuf[g_tModS.TxCount++] = 0x66; /* 功能码 */ + g_tModS.TxBuf[g_tModS.TxCount++] = func >> 8; + g_tModS.TxBuf[g_tModS.TxCount++] = func; + + g_tModS.TxBuf[g_tModS.TxCount++] = offset_addr >> 24; + g_tModS.TxBuf[g_tModS.TxCount++] = offset_addr >> 16; + g_tModS.TxBuf[g_tModS.TxCount++] = offset_addr >> 8; + g_tModS.TxBuf[g_tModS.TxCount++] = offset_addr >> 0; + + g_tModS.TxBuf[g_tModS.TxCount++] = 0 >> 24; + g_tModS.TxBuf[g_tModS.TxCount++] = 0 >> 16; + g_tModS.TxBuf[g_tModS.TxCount++] = 0 >> 8; + g_tModS.TxBuf[g_tModS.TxCount++] = 0 >> 0; + + g_tModS.TxBuf[g_tModS.TxCount++] = err; /* 执行结果 */ +} + /* ********************************************************************************************************* * 函 数 名: MODS66_ReadDispMem diff --git a/User/programmer/prog_if.c b/User/programmer/prog_if.c index 02bc12c..025b1b3 100755 --- a/User/programmer/prog_if.c +++ b/User/programmer/prog_if.c @@ -214,9 +214,9 @@ void PG_ReloadLuaVar(void) 20us 失败,30us成功, 选择50us */ g_tProg.MulDelayUsReadData = lua_GetVarUint32("MUL_DELAYUS_READ_DATA", 0); - + /* 2021-03-16 多路模式烧录STM32F103C8T6(可能是国产的),增加延迟1us */ - g_tProg.MulDelayUsReadAck = lua_GetVarUint32("MUL_DELAYUS_READ_ACK", 0); + g_tProg.MulDelayUsReadAck = lua_GetVarUint32("MUL_DELAYUS_READ_ACK", 0); } else if (g_tProg.ChipType == CHIP_SWIM_STM8) { @@ -339,24 +339,37 @@ void PG_PrintText(char *_str) /* 输出文本 */ StrUTF8ToGBK(_str, str, sizeof(str)); - if (g_gMulSwd.MultiMode > 0) /* 多路模式 */ + if (g_gMulSwd.MultiMode > 0) /* 多路模式, 1拖1 */ { - if (g_gMulSwd.Error[0] != 0) + if (g_gMulSwd.MultiMode == 1) { - strcat(str, " #1"); + if (g_gMulSwd.Error[0] != 0) + { + if (g_gMulSwd.SwitchPin == 0) strcat(str, " #1"); + else if (g_gMulSwd.SwitchPin == 1) strcat(str, " #2"); + else if (g_gMulSwd.SwitchPin == 2) strcat(str, " #3"); + else if (g_gMulSwd.SwitchPin == 3) strcat(str, " #4"); + } } - if (g_gMulSwd.Error[1] != 0) + else /* 1拖2,3,4 */ { - strcat(str, " #2"); + if (g_gMulSwd.Error[0] != 0) + { + strcat(str, " #1"); + } + if (g_gMulSwd.Error[1] != 0) + { + strcat(str, " #2"); + } + if (g_gMulSwd.Error[2] != 0) + { + strcat(str, " #3"); + } + if (g_gMulSwd.Error[3] != 0) + { + strcat(str, " #4"); + } } - if (g_gMulSwd.Error[2] != 0) - { - strcat(str, " #3"); - } - if (g_gMulSwd.Error[3] != 0) - { - strcat(str, " #4"); - } } if (g_MainStatus == MS_PROG_WORK) @@ -364,8 +377,7 @@ void PG_PrintText(char *_str) DispProgProgress(str, -1, 0xFFFFFFFF); /* -1表示不刷新进度 */ } - strcat(str, "\r\n"); - printf(str); + printf("%s\r\n", str); bsp_Idle(); } diff --git a/User/programmer/swd_prog_file.c b/User/programmer/swd_prog_file.c index 638755b..2771e58 100644 --- a/User/programmer/swd_prog_file.c +++ b/User/programmer/swd_prog_file.c @@ -1734,6 +1734,8 @@ uint16_t PG_SWD_EraseChip(uint32_t _FlashAddr) goto quit; } + target_flash_uninit(); + PG_PrintPercent(100, 0xFFFFFFFF); quit: diff --git a/User/programmer/w25q_flash.c b/User/programmer/w25q_flash.c index d801492..51e6f66 100644 --- a/User/programmer/w25q_flash.c +++ b/User/programmer/w25q_flash.c @@ -132,6 +132,13 @@ __forceinline void PIN_DELAY_SLOW (uint32_t delay) { #define W25_SCK_1() BSP_SET_GPIO_1(GPIOD, GPIO_PIN_15) /* MOSI 四路不同 */ +#define W25_MOSI1_PIN GPIO_PIN_0 +#define W25_MOSI2_PIN GPIO_PIN_1 +#define W25_MOSI3_PIN GPIO_PIN_3 +#define W25_MOSI4_PIN GPIO_PIN_4 + +#define W25_SCK_PIN GPIO_PIN_15 + #define W25_MOSI1_0() BSP_SET_GPIO_0(GPIOD, GPIO_PIN_0) #define W25_MOSI1_1() BSP_SET_GPIO_1(GPIOD, GPIO_PIN_0) @@ -144,8 +151,8 @@ __forceinline void PIN_DELAY_SLOW (uint32_t delay) { #define W25_MOSI4_0() BSP_SET_GPIO_0(GPIOD, GPIO_PIN_4) #define W25_MOSI4_1() BSP_SET_GPIO_1(GPIOD, GPIO_PIN_4) -#define W25_MOSI_0_SCK_0() GPIOD->BSRR = (uint32_t)(GPIO_PIN_15 | GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4) << 16 -#define W25_MOSI_1_SCK_0() GPIOD->BSRR = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | ((uint32_t)GPIO_PIN_15 << 16) +#define __W25_MOSI_0_SCK_0() GPIOD->BSRR = (uint32_t)(GPIO_PIN_15 | GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4) << 16 +#define __W25_MOSI_1_SCK_0() GPIOD->BSRR = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | ((uint32_t)GPIO_PIN_15 << 16) /* MISO 四路不同 */ @@ -203,11 +210,90 @@ void W25Q_InitHard(void) EIO_D9_Config(ES_PROG_SPI_FLASH); /* 选MODE3,平时SCK为1 */ - W25_SCK_1(); - + W25_SCK_1(); + W25_CS_1(); + W25Q_UnlockBlock(); /* SST26VFxxx 需要解除块保护 */ } +static void W25_MOSI_0_SCK_0(void) +{ + if (g_gMulSwd.MultiMode == 0) /* 单路烧录, */ + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI1_PIN) << 16; + } + else if (g_gMulSwd.MultiMode == 4) /* 1拖4 烧录 */ + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI1_PIN | W25_MOSI2_PIN | W25_MOSI3_PIN | W25_MOSI4_PIN) << 16; + } + else if (g_gMulSwd.MultiMode == 3) /* 1拖3 烧录 */ + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI1_PIN | W25_MOSI2_PIN | W25_MOSI3_PIN) << 16; + } + else if (g_gMulSwd.MultiMode == 2) /* 1拖2 烧录 */ + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI1_PIN | W25_MOSI2_PIN) << 16; + } + else if (g_gMulSwd.MultiMode == 1) /* 1拖1 烧录 */ + { + if (g_gMulSwd.SwitchPin == 0) + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI1_PIN) << 16; + } + else if (g_gMulSwd.SwitchPin == 1) + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI2_PIN) << 16; + } + else if (g_gMulSwd.SwitchPin == 2) + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI3_PIN) << 16; + } + else if (g_gMulSwd.SwitchPin == 3) + { + GPIOD->BSRR = (uint32_t)(W25_SCK_PIN | W25_MOSI4_PIN) << 16; + } + } +} + +static void W25_MOSI_1_SCK_0(void) +{ + if (g_gMulSwd.MultiMode == 0) /* 单路烧录, */ + { + GPIOD->BSRR = W25_MOSI1_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.MultiMode == 4) /* 1拖4 烧录 */ + { + GPIOD->BSRR = W25_MOSI1_PIN | W25_MOSI2_PIN | W25_MOSI3_PIN | W25_MOSI4_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.MultiMode == 3) /* 1拖3 烧录 */ + { + GPIOD->BSRR = W25_MOSI1_PIN | W25_MOSI2_PIN | W25_MOSI3_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.MultiMode == 2) /* 1拖2 烧录 */ + { + GPIOD->BSRR = W25_MOSI1_PIN | W25_MOSI2_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.MultiMode == 1) /* 1拖1 烧录 */ + { + if (g_gMulSwd.SwitchPin == 0) + { + GPIOD->BSRR = W25_MOSI1_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.SwitchPin == 1) + { + GPIOD->BSRR = W25_MOSI2_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.SwitchPin == 2) + { + GPIOD->BSRR = W25_MOSI3_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + else if (g_gMulSwd.SwitchPin == 3) + { + GPIOD->BSRR = W25_MOSI4_PIN | ((uint32_t)W25_SCK_PIN << 16); + } + } +} + /* ********************************************************************************************************* * 函 数 名: W25Q_SendBit8Fast @@ -289,23 +375,89 @@ static void W25Q_RaedBit8Fast(uint8_t *_rxbuf) W25_SCK_1(); gpio = W25_READ_MISO(); - if (gpio & W25_MISO1_PIN_A) + if (g_gMulSwd.MultiMode == 0) { - ret |= 0x00000001; + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } } - if (gpio & W25_MISO2_PIN_A) + else if (g_gMulSwd.MultiMode == 4) { - ret |= 0x00000100; - } - if (gpio & W25_MISO3_PIN_A) - { - ret |= 0x00010000; - } - if (gpio & W25_MISO4_PIN_A) - { - ret |= 0x01000000; + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00010000; + } + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x01000000; + } + } + else if (g_gMulSwd.MultiMode == 3) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00010000; + } + } + else if (g_gMulSwd.MultiMode == 2) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } + } + else if (g_gMulSwd.MultiMode == 1) + { + if (g_gMulSwd.SwitchPin == 0) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 1) + { + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 2) + { + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 3) + { + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x00000001; + } + } } - } _rxbuf[0] = ret; @@ -332,82 +484,158 @@ static void W25Q_RaedBit8FastDaul(uint8_t *_rxbuf) for (i = 0; i < 4; i++) { W25_SCK_0(); - if (gpio & W25_MISO1_PIN_B) - { - ret |= 0x00000001; - } - if (gpio & W25_MISO1_PIN_A) - { - ret |= 0x00000002; - } - if (gpio & W25_MISO2_PIN_B) + if (g_gMulSwd.MultiMode == 0) { - ret |= 0x00000100; + if (gpio & W25_MISO1_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000002; + } } - if (gpio & W25_MISO2_PIN_A) + else if (g_gMulSwd.MultiMode == 4) { - ret |= 0x00000200; - } - - if (gpio & W25_MISO3_PIN_B) + if (gpio & W25_MISO1_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000002; + } + + if (gpio & W25_MISO2_PIN_B) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000200; + } + + if (gpio & W25_MISO3_PIN_B) + { + ret |= 0x00010000; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00020000; + } + + if (gpio & W25_MISO4_PIN_B) + { + ret |= 0x01000000; + } + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x02000000; + } + } + else if (g_gMulSwd.MultiMode == 3) { - ret |= 0x00010000; - } - if (gpio & W25_MISO3_PIN_A) + if (gpio & W25_MISO1_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000002; + } + + if (gpio & W25_MISO2_PIN_B) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000200; + } + + if (gpio & W25_MISO3_PIN_B) + { + ret |= 0x00010000; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00020000; + } + } + else if (g_gMulSwd.MultiMode == 2) { - ret |= 0x00020000; + if (gpio & W25_MISO1_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000002; + } + + if (gpio & W25_MISO2_PIN_B) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000200; + } } - - if (gpio & W25_MISO4_PIN_B) + else if (g_gMulSwd.MultiMode == 1) { - ret |= 0x01000000; - } - if (gpio & W25_MISO4_PIN_A) - { - ret |= 0x02000000; - } + if (g_gMulSwd.SwitchPin == 0) + { + if (gpio & W25_MISO1_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000002; + } + } + else if (g_gMulSwd.SwitchPin == 1) + { + if (gpio & W25_MISO2_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000002; + } + } + else if (g_gMulSwd.SwitchPin == 2) + { + if (gpio & W25_MISO3_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00000002; + } + } + else if (g_gMulSwd.SwitchPin == 3) + { + if (gpio & W25_MISO4_PIN_B) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x00000002; + } + } + } + ret <<= 2; W25_SCK_1(); gpio = W25_READ_MISO(); } - if (gpio & W25_MISO1_PIN_B) - { - ret |= 0x00000001; - } - if (gpio & W25_MISO1_PIN_A) - { - ret |= 0x00000002; - } - - if (gpio & W25_MISO2_PIN_B) - { - ret |= 0x00000100; - } - if (gpio & W25_MISO2_PIN_A) - { - ret |= 0x00000200; - } - - if (gpio & W25_MISO3_PIN_B) - { - ret |= 0x00010000; - } - if (gpio & W25_MISO3_PIN_A) - { - ret |= 0x00020000; - } - - if (gpio & W25_MISO4_PIN_B) - { - ret |= 0x01000000; - } - if (gpio & W25_MISO4_PIN_A) - { - ret |= 0x02000000; - } - _rxbuf[0] = ret; _rxbuf[1] = ret >> 8; _rxbuf[2] = ret >> 16; @@ -438,22 +666,89 @@ static void W25Q_RaedBit8Slow(uint8_t *_rxbuf) gpio = W25_READ_MISO(); PIN_DELAY_S(); - if (gpio & W25_MISO1_PIN_A) + if (g_gMulSwd.MultiMode == 0) { - ret |= 0x00000001; + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } } - if (gpio & W25_MISO2_PIN_A) + else if (g_gMulSwd.MultiMode == 4) { - ret |= 0x00000100; + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00010000; + } + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x01000000; + } + } + else if (g_gMulSwd.MultiMode == 3) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00010000; + } + } + else if (g_gMulSwd.MultiMode == 2) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000100; + } } - if (gpio & W25_MISO3_PIN_A) + else if (g_gMulSwd.MultiMode == 1) { - ret |= 0x00010000; - } - if (gpio & W25_MISO4_PIN_A) - { - ret |= 0x01000000; - } + if (g_gMulSwd.SwitchPin == 0) + { + if (gpio & W25_MISO1_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 1) + { + if (gpio & W25_MISO2_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 2) + { + if (gpio & W25_MISO3_PIN_A) + { + ret |= 0x00000001; + } + } + else if (g_gMulSwd.SwitchPin == 3) + { + if (gpio & W25_MISO4_PIN_A) + { + ret |= 0x00000001; + } + } + } } _rxbuf[0] = ret; _rxbuf[1] = ret >> 8; @@ -476,6 +771,7 @@ static void W25Q_RaedBit8SlowDaul(uint8_t *_rxbuf) W25_SCK_1(); PIN_DELAY_S(); gpio = W25_READ_MISO(); + if (gpio & W25_MISO1_PIN_B) { ret |= 0x00000001; @@ -1239,6 +1535,18 @@ uint8_t W25Q_WaitBusy(uint32_t _timeout) W25Q_SendAndReadData(txbuf, 1, rxbuf, 1); + if (g_gMulSwd.MultiMode == 0) /* 单路烧录 */ + { + if ((rxbuf[0] & WIP_FLAG) != 0) + { + ; + } + else + { + return 1; /* OK */ + } + } + else /* 多路模式 */ { uint8_t err = 0;