实现大部分小板通信命令

This commit is contained in:
ranchuan
2023-10-07 18:15:52 +08:00
parent 8e3a140bec
commit ffb4ff97b2
21 changed files with 1000 additions and 173 deletions

View File

@@ -103,7 +103,7 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<nTsel>4</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
@@ -114,7 +114,7 @@
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\UL2CM3.DLL</pMon>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
@@ -125,12 +125,12 @@
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)</Name>
<Name>-U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>d</Name>
<Name>?</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@@ -230,12 +230,6 @@
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\USART1</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
@@ -345,12 +339,12 @@
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)</Name>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F30x_HD -FL040000 -FS08000000 -FP0($$Device:GD32F303RC$Flash\GD32F30x_HD.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)</Name>
<Name>-U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@@ -1154,11 +1148,35 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\elec_det\interface\EWChecker.c</PathWithFileName>
<FilenameWithoutPath>EWChecker.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\elec_det\elec_det.c</PathWithFileName>
<FilenameWithoutPath>elec_det.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\elec_det\elec_cmd.c</PathWithFileName>
<FilenameWithoutPath>elec_cmd.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@@ -1169,7 +1187,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1181,7 +1199,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1201,7 +1219,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1213,7 +1231,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1225,7 +1243,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1237,7 +1255,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1249,7 +1267,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1261,7 +1279,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1273,7 +1291,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1285,7 +1303,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1297,7 +1315,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1309,7 +1327,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1321,7 +1339,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1333,7 +1351,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1345,7 +1363,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1357,7 +1375,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1369,7 +1387,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1381,7 +1399,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1393,7 +1411,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1405,7 +1423,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1417,7 +1435,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>76</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1431,13 +1449,13 @@
<Group>
<GroupName>soft</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1449,7 +1467,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1461,7 +1479,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1473,7 +1491,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1485,7 +1503,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1497,7 +1515,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1509,7 +1527,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1521,7 +1539,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1533,7 +1551,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1545,7 +1563,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1557,7 +1575,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1577,7 +1595,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1589,7 +1607,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1601,7 +1619,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1613,7 +1631,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1625,7 +1643,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1637,7 +1655,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1657,7 +1675,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1677,7 +1695,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1689,7 +1707,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1701,7 +1719,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1713,7 +1731,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>96</FileNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1725,7 +1743,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>97</FileNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1737,7 +1755,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>98</FileNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1757,7 +1775,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>99</FileNumber>
<FileNumber>101</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1777,7 +1795,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>100</FileNumber>
<FileNumber>102</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1789,7 +1807,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>101</FileNumber>
<FileNumber>103</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -10,7 +10,7 @@
<TargetName>app</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@@ -138,7 +138,7 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3></Flash3>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
@@ -185,7 +185,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@@ -352,7 +351,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -719,11 +718,21 @@
<FileType>1</FileType>
<FilePath>.\source\elec_det\interface\XTChecker.c</FilePath>
</File>
<File>
<FileName>EWChecker.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\interface\EWChecker.c</FilePath>
</File>
<File>
<FileName>elec_det.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\elec_det.c</FilePath>
</File>
<File>
<FileName>elec_cmd.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\elec_cmd.c</FilePath>
</File>
</Files>
</Group>
<Group>
@@ -1238,7 +1247,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@@ -1405,7 +1413,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -1852,7 +1860,7 @@
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<uClangAs>2</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -1943,11 +1951,21 @@
<FileType>1</FileType>
<FilePath>.\source\elec_det\interface\XTChecker.c</FilePath>
</File>
<File>
<FileName>EWChecker.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\interface\EWChecker.c</FilePath>
</File>
<File>
<FileName>elec_det.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\elec_det.c</FilePath>
</File>
<File>
<FileName>elec_cmd.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\elec_det\elec_cmd.c</FilePath>
</File>
</Files>
</Group>
<Group>
@@ -2906,7 +2924,7 @@
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<uClangAs>2</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -3448,7 +3466,7 @@
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<uClangAs>2</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -3552,7 +3570,7 @@
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<uClangAs>2</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -3631,7 +3649,7 @@
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<uClangAs>2</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -3709,13 +3727,4 @@
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>checher_slave</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

Binary file not shown.

View File

@@ -179,5 +179,6 @@
str_is_print_str 函数中len为0时返回0
2023.10.6
移植与雷管通信相关代码,编译通过
2023.10.7
实现大部分小板命令

View File

@@ -41,6 +41,8 @@ scheme 109~110
#define FLASH_PARAM_SECTOR_NUM (1)
#define FLASH_SCHEME_SECTOR (109)
#define FLASH_SCHEME_SECTOR_NUM (3)
#define FLASH_JWTCODE_SECTOR (112)
#define FLASH_JWTCODE_SECTOR_NUM (9)
@@ -78,7 +80,7 @@ typedef struct{
// 擦除指定扇区返回0成功-1失败
static int flash_erase(uint32_t FLASH_Sector)
static int flash_erase(uint32_t sector)
{
self_def *s=&g_self;
FLASH_Status ret;
@@ -89,7 +91,7 @@ static int flash_erase(uint32_t FLASH_Sector)
FLASH_Unlock();
FLASH_CLEAR_FLAG();
// 对于f103 2048byte为一个扇区这里把扇区地址转化为flash地址
ret=FLASH_ErasePage(FLASH_Sector*2048);
ret=FLASH_ErasePage(sector*2048);
rt_mutex_release(s->mutex);
if(ret!=FLASH_COMPLETE)
{
@@ -102,6 +104,24 @@ static int flash_erase(uint32_t FLASH_Sector)
}
// 操作开始
int flash_operate_start(void)
{
FLASH_Status state;
int ret=0;
self_def *s=&g_self;
#ifdef RT_THREAD
param_check(s->mutex);
#endif
rt_mutex_take(s->mutex,RT_WAITING_FOREVER);
FLASH_Unlock();
FLASH_CLEAR_FLAG();
rt_mutex_release(s->mutex);
return 0;
}
// 操作结束
int flash_operate_end(void)
{
@@ -159,7 +179,7 @@ int flash_erase_slave(void)
}
return 0;
}
//方案区 4K
//方案区 6K
int flash_erase_scheme(void)
{
int ret;
@@ -176,6 +196,17 @@ int flash_erase_lua(void)
return -1;
}
// 模块程序区 16K
int flash_erase_jwtcode(void)
{
int ret;
for(int i=0;i<FLASH_JWTCODE_SECTOR_NUM;i++){
ret=flash_erase(FLASH_JWTCODE_SECTOR+i);
if(ret!=0) return -1;
}
return 0;
}
uint32_t *flash_get_param(void)
{
@@ -201,6 +232,10 @@ uint32_t *flash_get_scheme(void)
{
return (void *)(FLASH_BASE+FLASH_SECTOR_SIZE*FLASH_SCHEME_SECTOR);
}
uint32_t *flash_get_jwtcode(void)
{
return (void *)(FLASH_BASE+FLASH_SECTOR_SIZE*FLASH_JWTCODE_SECTOR);
}
uint32_t *flash_get_lua(void)
{
@@ -252,6 +287,24 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len)
}
// 写数据自动擦除
int flash_write_with_erase(uint8_t *addr,const uint8_t *data,int len)
{
int ret=0;
uint32_t addr_u32=(uint32_t)addr;
if((addr_u32%FLASH_SECTOR_SIZE)==0){
ret=flash_erase(addr_u32/FLASH_SECTOR_SIZE);
flash_operate_end();
if(ret!=0) return -1;
}else{
flash_operate_start();
}
ret=flash_write(addr,data,len);
flash_operate_end();
if(ret!=0) return -1;
return 0;
}
uint8_t *flash_get_rom(rom_head **head)

View File

@@ -23,14 +23,18 @@ int flash_erase_app2(void);
int flash_erase_slave(void);
int flash_erase_scheme(void);
int flash_erase_lua(void);
int flash_erase_jwtcode(void);
uint32_t *flash_get_param(void);
//uint32_t *flash_get_app1(void);
uint32_t *flash_get_app2(void);
uint32_t *flash_get_slave(void);
uint32_t *flash_get_scheme(void);
uint32_t *flash_get_lua(void);
uint32_t *flash_get_jwtcode(void);
int flash_write(uint8_t *addr,const uint8_t *data,int len);
int flash_operate_end(void);
int flash_write_with_erase(uint8_t *addr,const uint8_t *data,int len);

View File

@@ -55,17 +55,17 @@ uint8_t uc_buf[4];
#define APP_BEG_ADDR 0x8004000
#define APP_END_ADDR 0x8024000
// 模块程序地址
// 这个地址要和 dev_flash.c 中定义的地址相对应
#define MC_CODE_ADDR \
(FLASH_BASE+2048*112+128)
//#define APP_TEST_BOARD_CFG 0x803E800
#define MC_CODE_ADDR 0x803B000
#define APP_TEST_PLAN_ADDR 0x803F000
#define APP_TEST_BOOTFLAG_ADDR 0x803F800
#define FCM_END_ADDR 0x8040000
#define FMC_PAGE_SIZE ((uint16_t)0x800U)
// 方案地址
// 这个地址要和 dev_flash.c 中定义的地址相对应
#define APP_TEST_PLAN_ADDR \
(FLASH_BASE+2048*109+128)
// 方案大小
#define APP_TEST_PLANINFO_SIZE 2048

View File

@@ -16,7 +16,7 @@ static volatile CurrentSample_Range_eu buscurrent_range = Current_Max;
#endif
#define SMod_Read_Idle_Filter 90
#define DMod_Read_Idle_Filter 80
#define DMod_Read_Idle_Filter 50
volatile uint16_t* EW_Read_AD_V = FireBus_ADC_Buf;
static volatile uint16_t SMod_Read_Idle_C;
@@ -389,16 +389,17 @@ void FireBus_ReadInspect_Data(uint16_t count,uint8_t* buf)
}
/*************************************************************/
#define DMOD_READ_AD_FILTER_COUNT 4
static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t time_out,uint16_t ad_line,uint16_t* max_ad)
{
uint32_t ul_ad_sample;
uint32_t ul_index = 0;
uint16_t us_adc_buf[6];
uint16_t us_adc_buf[DMOD_READ_AD_FILTER_COUNT+1];
uint32_t ul_count = 0;
uint32_t uc_step = 0;
uint32_t ul_h_count = 0,ul_l_count = 0;
*max_ad = 0;
for(ul_count =0; ul_count < 5; ul_count++)
for(ul_count =0; ul_count < DMOD_READ_AD_FILTER_COUNT; ul_count++)
{
us_adc_buf[ul_count++] = ADC_GetCurADCFast();
}
@@ -415,10 +416,10 @@ static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t
// PBout(I2IC_SCL_Pin_Nu) = 0;
// }
us_adc_buf[ul_count++] = ul_ad_sample;
ul_count %= 0x06;
ul_count %= DMOD_READ_AD_FILTER_COUNT;
ul_h_count = 0;
ul_l_count = 0;
for(ul_index =0; ul_index < 6; ul_index++)
for(ul_index =0; ul_index < DMOD_READ_AD_FILTER_COUNT; ul_index++)
{
if(us_adc_buf[ul_index] > ad_line)
{
@@ -427,7 +428,7 @@ static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t
ul_l_count++;
}
}
if(uc_step == 0 && ul_h_count > 5)//启动周期计数
if(uc_step == 0 && ul_h_count >(DMOD_READ_AD_FILTER_COUNT-1))//启动周期计数
{
(*plus_h)++;
(*plus_t)++;
@@ -437,18 +438,18 @@ static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t
}
if(uc_step == 1)
{
if(ul_h_count > 5)
if(ul_h_count > (DMOD_READ_AD_FILTER_COUNT-1))
{
PBout(I2IC_SCL_Pin_Nu) = 1 ;
(*plus_h)++;
uc_step = 1;
}else if(ul_l_count > 5) //由高变低
}else if(ul_l_count > (DMOD_READ_AD_FILTER_COUNT-1)) //由高变低
{
PBout(I2IC_SCL_Pin_Nu) = 0;
uc_step = 2;
}
}
else if(uc_step == 2 && ul_h_count > 5)//由低变高
else if(uc_step == 2 && ul_h_count > (DMOD_READ_AD_FILTER_COUNT-1))//由低变高
{
PBout(I2IC_SCL_Pin_Nu) = 1 ;
break;
@@ -483,7 +484,7 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
uint16_t ad_max = 0,ad_max_temp = 0;
CurrentSample_Range_eu range = buscurrent_range;//档位保存
Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HIGH);
ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HFAST);
delay_us(2000);
//总线跳转到中电平
EW_DIFF_MOD_M;
@@ -816,7 +817,14 @@ static void EW_TrimPlusCallback(uint8_t flag)
}
EW_Trim_Flag = flag;
}
static void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count)
/*
@brief 发送校准脉冲
@param cycle 周期
@param duty 总线高电平时间
@param count 脉冲个数
*/
void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count)
{
FireBus_ClkAmend(cycle,duty,count,EW_TrimPlusCallback);
EW_Trim_Flag = 0;
@@ -907,7 +915,7 @@ uint8_t EW_WriteMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len)
len = 10;
}
EW_CommBuf[3] = len;
memcpy((void*)(EW_CommBuf+4),buf,len);
memcpy((void*)EW_CommBuf+4,buf,len);
DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag);
if(uc_readflag == 0)
{
@@ -947,7 +955,7 @@ uint8_t EW_ReadMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len)
len = 10;
}
EW_CommBuf[3] = len;
memcpy((void*)(EW_CommBuf+4),buf,len);
memcpy((void*)EW_CommBuf+4,buf,len);
DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag);
if(uc_readflag == 0)
{
@@ -978,7 +986,7 @@ uint8_t EW_RunBootLoader(uint16_t addr,uint8_t reboot)
{
ul_bootflag = 0x9966AA55;
}
memcpy((void*)(EW_CommBuf+2),&ul_bootflag,4);
memcpy((void*)EW_CommBuf+2,&ul_bootflag,4);
DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,0);
return 0;
}
@@ -1000,7 +1008,7 @@ uint8_t EW_WriteRunCfg(uint16_t addr,RunCfg_un* runcfg)
addr = (addr & 0xFFC0) | 20;
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((void*)(EW_CommBuf+2),&runcfg,3);
memcpy((void*)EW_CommBuf+2,&runcfg,3);
DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,uc_readflag);
if(uc_readflag == 0)
{
@@ -1036,7 +1044,7 @@ uint8_t EW_SetAddrByUID(uint16_t addr,uint8_t* uid,uint8_t uid_len,uint8_t* ack_
addr = (addr & 0xFFC0) | 21;
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((void*)(EW_CommBuf+2),uid,uid_len);
memcpy((void*)EW_CommBuf+2,uid,uid_len);
DMod_SendBytes((uint8_t*)EW_CommBuf,uid_len+2,EW_DMOD_Peroid,uc_readflag);
if(uc_readflag == 0)
{
@@ -1075,7 +1083,7 @@ uint8_t EW_FastSetByUID(uint16_t addr,uint16_t delay, uint8_t pwd_flag,uint8_t*
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
EW_CommBuf[2] = pwd_flag;
memcpy(((void*)(EW_CommBuf+3)),&delay,2);
memcpy(((void*)(EW_CommBuf)+3),&delay,2);
memcpy((void*)(EW_CommBuf+5),uid,uid_len);
uid_len +=5;
DMod_SendBytes(((uint8_t*)(EW_CommBuf)),uid_len,EW_DMOD_Peroid,uc_readflag);
@@ -1106,7 +1114,7 @@ uint8_t EW_SetDelay(uint16_t addr,uint16_t delay)
addr = (addr & 0xFFC0) | 23;
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((void*)(EW_CommBuf+2),&delay,2);
memcpy((void*)EW_CommBuf+2,&delay,2);
DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0);
uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
@@ -1130,7 +1138,7 @@ uint8_t EW_VerfyPWD(uint16_t addr,uint8_t* pwd,uint8_t pwd_len)
addr = (addr & 0xFFC0) | 24;
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((void*)(EW_CommBuf+2),pwd,pwd_len);
memcpy((void*)EW_CommBuf+2,pwd,pwd_len);
pwd_len += 2;
DMod_SendBytes((uint8_t*)EW_CommBuf,pwd_len,EW_DMOD_Peroid,0);
return 0;
@@ -1282,7 +1290,7 @@ uint8_t EW_CheckRunCfg(uint16_t addr,uint32_t cfg_mask ,uint16_t cfg_state,uint8
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((uint8_t*)&EW_CommBuf[2],&cfg_mask,3);
memcpy((uint8_t*)&EW_CommBuf[5],&cfg_state,2);
memcpy((uint8_t*)&EW_CommBuf[5],&cfg_state,3);
EW_CommBuf[8] = *rtv;
DMod_SendBytes((uint8_t*)EW_CommBuf,9,EW_DMOD_Peroid,1);
delay_ms(5);
@@ -1388,7 +1396,6 @@ uint8_t EW_SetReportCfg(uint8_t speed,uint8_t cur)
EW_CommBuf[2] = speed;
EW_CommBuf[3] = cur;
DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0);
return 0;
}
/*
@@ -1408,7 +1415,7 @@ uint8_t EW_UpdateCommAddr(uint8_t addr,uint16_t new_addr)
addr = (addr & 0xFFC0) | 36;
EW_CommBuf[0] = addr&0xFF;
EW_CommBuf[1] = (addr >> 8)&0xFF;
memcpy((void*)(EW_CommBuf+2),&new_addr,2);
memcpy((void*)EW_CommBuf+2,&new_addr,2);
DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,uc_readflag);
if(uc_readflag == 0)
{
@@ -1526,5 +1533,3 @@ uint8_t EW_ReadUID(uint16_t addr,uint8_t* uid,uint8_t uid_len)
}
return uc_ack;
}

View File

@@ -122,7 +122,14 @@ volatile struct
#define EW_BOOTLOADER_RUN 61 //运行bootloader
#define EW_RA_REGISTER 62 //读MTP
#define EW_WA_REGISTER 63 //写MTP
/*
@brief 发送校准脉冲
@param cycle 周期
@param duty 总线高电平时间
@param count 脉冲个数
*/
void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count);
/*
@brief 单端第二版,差分接收数据
@param *buf 数据缓存指针

View File

@@ -0,0 +1,30 @@
#include "elec_det.h"
#include "commend.h"
#include "mystring.h"
// 电子模块相关调试命令
static int cmd_check(list_def *argv)
{
array_def *data=arr_creat();
cmd_print("start check.");
elec_check_with_scheme(data);
arr_delete(data);
return 0;
}
commend_export(check,cmd_check,"start check")

View File

@@ -1,6 +1,7 @@
#include "board.h"
#include "bytearray.h"
#include "mystdlib.h"
#include "debug.h"
#include "elec_det.h"
#include "base/delay.h"
@@ -23,15 +24,42 @@
typedef struct{
CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//方案参数结构体指针
int scheme_inited;
}self_def;
static self_def g_self;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// 初始化
int elec_init(void)
{
self_def *s=&g_self;
void Ye_BoardInit(void);
void Ye_BoardCheck(void);
int elec_check_scheme(void);
void elec_load_scheme(void);
Ye_BoardInit();
Ye_BoardCheck();
if(elec_check_scheme()!=0){
// 方案校验失败
DBG_WARN("scheme check failed.");
s->scheme_inited=0;
return 1;
}
s->scheme_inited=1;
elec_load_scheme();
return 0;
}
// 获取本机地址
uint8_t elec_local_addr(void)
{
static uint8_t addr=0;
@@ -41,13 +69,13 @@ uint8_t elec_local_addr(void)
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>led1״̬
// 设置led1状态
void elec_led1_power(int power)
{
LED1_Out=power?1:0;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>led2״̬
// 设置led2状态
void elec_led2_power(int power)
{
LED2_Out=power?1:0;
@@ -55,40 +83,44 @@ void elec_led2_power(int power)
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 获取检测结果
array_def *elec_check_result(void)
{
array_def *r=arr_creat();
arr_append(r,3);
return arr_temp(r);
}
// дӲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int elec_write_hardversion(int version)
// 写硬件版本号
array_def *elec_write_hardversion(int version)
{
array_def *r=arr_creat();
board_st.hard_v=version;
return 0;
arr_append(r,0);
return arr_temp(r);
}
// д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼ֵ
int elec_write_resistor_cbv(int cbv)
// 写电阻校准值
array_def *elec_write_resistor_cbv(int cbv)
{
array_def *r=arr_creat();
board_st.resistor_diff=cbv;
arr_append(r,0);
return 0;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD>ֵ
// 测量桥丝阻值
array_def *elec_check_resistor(void)
{
/*
1 ͨ<EFBFBD><EFBFBD>1-4ͨ<34><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿
2 ͨ<EFBFBD><EFBFBD>2-3ͨ<33><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿
3 ͨ<EFBFBD><EFBFBD>1-3ͨ<33><CDA8><EFBFBD><EFBFBD><EFBFBD>
4 ͨ<EFBFBD><EFBFBD>2-4ͨ<34><CDA8><EFBFBD><EFBFBD><EFBFBD>
1 通道1-4通过桥丝
2 通道2-3通过桥丝
3 通道1-3通测阻抗
4 通道2-4通测阻抗
*/
uint16_t aus_sample[5];
uint16_t us_resistor;
@@ -98,7 +130,7 @@ array_def *elec_check_resistor(void)
{
aus_sample[uc_index] -= board_st.resistor_diff;
}
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
// 读取方案中测量电阻的模式
switch(0)
{
case 0: us_resistor = aus_sample[0];break;
@@ -117,7 +149,7 @@ array_def *elec_check_resistor(void)
// У<EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD>ɹ<EFBFBD>
// 校验方案,返0成功
static int elec_check_scheme(void)
{
uint32_t ul_crc32;
@@ -135,7 +167,7 @@ static int elec_check_scheme(void)
// <EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD>
// 加载方案
static void elec_load_scheme(void)
{
self_def *s=&g_self;
@@ -159,7 +191,7 @@ static void elec_load_scheme(void)
}
// <EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>
// 进行检测
array_def *elec_check_with_scheme(array_def *uid_psw)
{
self_def *s=&g_self;
@@ -172,10 +204,14 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
uint8_t res=0;
array_def *r=arr_creat();
chip_type=(board_st.plan_id >> 12 ) & 0x0F;
if(chip_type>=LENGTH(tasks_fun_table)){
if(s->scheme_inited==0){
arr_append(r,1);
return arr_temp(r);
}
if(chip_type>=LENGTH(tasks_fun_table)){
arr_append(r,2);
return arr_temp(r);
}
memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st));
int task_index=0;
int err_flag=0;
@@ -184,8 +220,8 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
memset(&checker_runcfg.task_info,0,sizeof(CheckerTask_Info_st));
taskid=ptaskindex[task_index];
memset(checker_runcfg.params,0,20);
checker_runcfg.param_count = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
checker_runcfg.rtv_count = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
checker_runcfg.param_count = 0;//参数个数
checker_runcfg.rtv_count = 0;//返回值个数
checker_runcfg.excue_rtv = 0;
checker_runcfg.task_info.retry_time = 0;
if(taskid>=CHECKER_MAXID_COUNT){
@@ -200,13 +236,13 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
break;
}
// װ<EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>
// 装载参数
rt_memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st));
checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F;
checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F;
rt_memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2);
// ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 执行任务
for(int i=0;i<1+task_par->retry_time;i++)
{
checker_runcfg.excue_rtv=1;
@@ -216,23 +252,23 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
break;
}
// <EFBFBD><EFBFBD>Ѱ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 找寻下一个任务
if((checker_runcfg.excue_rtv != 0)
&& (checker_runcfg.task_info.error_jumpto != 0)
&& (checker_runcfg.task_info.error_jumpto != 0xFF)
)
{
uint8_t uc_index = task_index+1;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>
uint8_t uc_index = task_index+1;//如果时跳至下一个,直接顺序执行
task_index = checker_runcfg.task_info.error_jumpto;
while(uc_index < task_index)
{
Checker_MaskResult(1,uc_index);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δִ<EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>±꣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>
Checker_MaskResult(1,uc_index);//将跳过的步骤标记未执行
//调整参数返回值下标,将跳过的步骤里面的返回值存储空间保留
checker_runcfg.rtv_index += (s->task_info_array[uc_index]->param_rtv_count >> 4) & 0x0F;
uc_index++;
}
}else{
task_index++;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>
task_index++;//正常情况直接顺序执行
}
}
@@ -246,3 +282,5 @@ array_def *elec_check_with_scheme(array_def *uid_psw)

View File

@@ -3,10 +3,10 @@
#include "stdint.h"
#include "bytearray.h"
int elec_init(void);
uint8_t elec_local_addr(void);
@@ -14,10 +14,15 @@ void elec_led1_power(int power);
void elec_led2_power(int power);
array_def *elec_check_result(void);
array_def *elec_write_hardversion(int version);
array_def *elec_write_resistor_cbv(int cbv);
array_def *elec_check_resistor(void);
array_def *elec_check_with_scheme(array_def *uid_psw);

View File

@@ -273,7 +273,8 @@
#define EW_SINGLE_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
#define EW_SINGLE_MOD_H HMOS_SWITCH_W_1
#define EW_DIFF_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
#define EW_DIFF_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
#define EW_DIFF_MOD_H HMOS_SWITCH_W_1
#define EW_DIFF_MOD_L HMOS_SWITCH_W_0
#define EW_BUS_OFF HMOS_SWITCH_OFF

View File

@@ -625,9 +625,14 @@ void MC_IICUpdateMTP(void)
if(checker_runcfg.params[0] == 0x1000)
{
auc_setMTPOperReg_cmd[2] = 0x04;
auc_earse_cmd[0]= 0x27;
auc_earse_cmd[1]= 0xD8;
}else{
auc_setMTPOperReg_cmd[2] = 0x00;
}
auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF;
auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF;
uc_ack = 0;
uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0);
delay_ms(5);
@@ -645,8 +650,7 @@ void MC_IICUpdateMTP(void)
return;
}
auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF;
auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF;
uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setMTPOperReg_cmd,sizeof(auc_setMTPOperReg_cmd),&ul_sendlen,0);
//设置MTP操作范围
if(uc_ack != 0)

View File

@@ -0,0 +1,259 @@
#include "EWChecker.h"
#include "driver/EWDriver.h"
#include "base/delay.h"
#include "hardware/adc_cfg.h"
#include "base/utility.h"
#include "hardware/power.h"
#include "hardware/timer_cfg.h"
#define UPDATA_PACK_LEN 58
#define UPDATA_BASE_ADDR 0x1000
#define UPDATA_DATA_LEN (12*1024)
#define UPDATA_FLAG_ADDR (0x3c7c)
//#define UPDATA_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55})
#define UPDATA_FLAG ((uint8_t []){0xaa,0xbb,0xcc,0xdd})
// 擦除
static uint8_t EW_Erease(void)
{
uint8_t data[3]={0xfe,0x00,0x00};
uint8_t read[4]={0};
uint8_t ret=0;
DMod_SendBytesXor(data,2,1);
ret=DMod_ReadBytesXor(read,4,100);
delay_ms(50);
return ret;
}
// 跳转
static uint8_t EW_Jump(void)
{
uint8_t data[3]={0xf9,0x00,0x00};
uint8_t read[4]={0};
uint8_t ret=0;
DMod_SendBytesXor(data,2,1);
ret=DMod_ReadBytesXor(read,4,100);
delay_ms(50);
return ret;
}
// 充电
static uint8_t EW_Charg(void)
{
uint8_t data[4]={0xf8,0x01,0x04,0x00};
uint8_t read[4]={0};
uint8_t ret=0;
delay_ms(2000);
DMod_SendBytesXor(data,3,1);
ret=DMod_ReadBytesXor(read,4,100);
delay_ms(5000);
return ret;
}
// 发送数据
// len 最长为58字节
static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len)
{
uint8_t ret=0;
uint8_t read[4]={0};
uint8_t *buf=rt_malloc(len+2+2+1);
if(buf==RT_NULL) return 1;
buf[0]=0xfc;
buf[1]=2+len;
buf[2]=addr&0xff;
buf[3]=addr>>8;
rt_memcpy(&buf[4],d,len);
DMod_SendBytesXor(buf,len+2+2,1);
ret=DMod_ReadBytesXor(read,4,100);
rt_free(buf);
delay_ms(50);
return ret;
}
// 校验
static uint8_t EW_CheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc)
{
uint8_t ret=0;
uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8};
uint8_t read[4+4]={0};
DMod_SendBytesXor(cmd,6,1);
ret=DMod_ReadBytesXor(read,8,100);
if(ret==0){
if(crc){
*crc=(read[3])|(read[4]<<8)|(read[5]<<16)|(read[6]<<24);
}
}
delay_ms(50);
return ret;
}
// 读取
static uint8_t EW_Read(uint16_t adr,uint8_t *buf,uint16_t len)
{
uint8_t ret=0;
uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len};
uint16_t read_len=2+len+1+1;
uint8_t *read=rt_malloc(read_len);
if(read==RT_NULL) return 1;
DMod_SendBytesXor(cmd,6,1);
ret=DMod_ReadBytesXor(read,read_len,100);
rt_memset(buf,0,len);
if(ret==0)
{
rt_memcpy(buf,&read[3],len);
}
delay_ms(50);
rt_free(read);
return ret;
}
// 升级
void EW_Updata(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
uint8_t ret=0;
uint8_t *data=(uint8_t *)MC_CODE_ADDR;
uint16_t len=UPDATA_DATA_LEN;
uint16_t addr=UPDATA_BASE_ADDR;
uint8_t pack_len=UPDATA_PACK_LEN;
uint32_t crc=0;
uint32_t crc_module=0;
ret=EW_Charg();
if(ret) {ret=1;goto err;}
ret=EW_Erease();
if(ret) {ret=2;goto err;}
while(len>0){
pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len;
ret=EW_Write(addr,data,pack_len);
addr+=pack_len;
data+=pack_len;
len-=pack_len;
if(ret) {ret=3;goto err;}
}
crc=Crc32Calu((uint32_t *)MC_CODE_ADDR,UPDATA_DATA_LEN/4);
ret=EW_CheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module);
if(ret) {ret=4;goto err;}
if(crc!=crc_module)
{ret=5;goto err;}
ret=EW_Jump();
if(ret) {ret=6;goto err;}
delay_ms(100);
ret=EW_EnWriteMTP(0,1);
if(ret) {ret=7;goto err;}
delay_ms(100);
// 数据溢出
// ret=EW_WriteMTP(0,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4);
if(ret) {ret=8;goto err;}
delay_ms(100);
err:
Checker_MaskResult(ret,checker_runcfg.task_info.runindex);
}
void EW_Test_PowerOFF(void)
{
uint8_t uc_rtv = 0;
delay_os_ms(100);
XTBUS_OFF;
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
void EW_Empty(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
int count=cfg->rtv_count;
while(count > 0)
{
cfg->Test_Rtv[cfg->rtv_index++] = 0;
count--;
}
Checker_MaskResult(0,cfg->task_info.runindex);
}
void EW_Test_SetBusV(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
uint8_t uc_rtv = 0;
uint16_t us_h_v,us_m_v;
//us_h_v = cfg->params[0];
us_h_v = 240;
if(us_h_v < 55)
{
uc_rtv = 1;
}else{
us_m_v = 50;
uc_rtv |= PowerCalibration_set(us_h_v,us_m_v);
XTBUS_ON
us_m_v = ((us_h_v/80)+2)*60;
delay_ms(us_m_v);
us_h_v = Power_GetBousV();
Checker_SetRtv(&us_h_v,cfg->rtv_count);
}
Checker_MaskResult(uc_rtv,cfg->task_info.runindex);
}
CheckerTask ewtaskArray[CHECKER_MAXID_COUNT] ={
Checker_PowerPrapare, //0 电源准备
EW_Empty, //1 上电充能
EW_Test_SetBusV, //2 设置总线电压
EW_Empty, //3 获取总线电流
EW_Empty, //4 扫描UID
EW_Empty, //5 写配置参数
EW_Empty, //6 验证配置
EW_Empty, //7 模拟注码
EW_Empty, //8 充能统计
EW_Empty, //9 写现场值 网络id 延时
EW_Empty, //10比对现场值
EW_Empty, //11 桥丝通断检测
EW_Empty, //12 电容容量统计
EW_Empty, //13 延时等待
EW_Empty, //14 写管壳号/工厂信息
EW_Empty, //15 写UID
EW_Empty, //16 写密码
EW_Empty, //17 写入/检测备份区标志
EW_Empty, //18 读取备份区数据
EW_Empty, //19 校准
EW_Empty, //20 使能通讯末电流采集
EW_Empty, //21 获取通讯末电流
EW_Empty, //22 放电
EW_Empty, //23 在线检测
EW_Empty, //24 状态检测
EW_Empty, //25 起爆
EW_Empty, //26 复位
EW_Test_PowerOFF, //27 关总线
EW_Empty, //28 芯片锁存
EW_Empty, //29 使能赋码设备
EW_Empty, //30 在线检测
EW_Empty, //31 密码验证
EW_Empty, //32 加载芯片配置
EW_Empty, //33 电容压差测试
Checker_ResistorSample,//34 桥丝电阻测试
EW_Empty, //35 检测过程中注码
EW_Empty, //36 验证注码
EW_Empty, //37 模块在线检测
EW_Updata, //38 升级
(void*)0 //数组结束
};

View File

@@ -0,0 +1,22 @@
#ifndef EWChecker_h__
#define EWChecker_h__
#include "base/define.h"
#include "basechecker.h"
#include "stdint.h"
extern CheckerTask ewtaskArray[CHECKER_MAXID_COUNT] ;
#endif

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-10-06 18:40:44"
#define BUILD_DATE "2023-10-07 18:12:30"
#define SOFT_VERSION "0.03"

View File

@@ -19,7 +19,7 @@
#include "mymisc.h"
#include "dev_backup.h"
#include "compiler_info.h"
#include "elec_det.h"
@@ -31,6 +31,7 @@ int main()
{
const sys_param_def *par=sys_param();
debug_init();
elec_init();
app_init();
protu_def *protu=app_variable("protu",0,0);
@@ -52,7 +53,10 @@ int main()
while(1)
{
rt_thread_mdelay(5000);
elec_led2_power(1);
rt_thread_mdelay(300);
elec_led2_power(0);
rt_thread_mdelay(300);
}
}

View File

@@ -1,5 +1,5 @@
#include "board.h"
#include "if_rtt.h"
#include "stdio.h"
#include "stdarg.h"
@@ -8,19 +8,44 @@
#ifdef RT_THREAD
#include "rtthread.h"
#endif
#define DBG_DEV rtt()
#if 0
#define DBG_DEV_INIT() rtt()->init()
#define DBG_DEV_WRITE(d,len) rtt()->write(d,len)
#else
#define DBG_DEV_INIT()\
{\
g_data.uart=dev_get("uart1");\
if(g_data.uart){\
g_data.uart->init(g_data.uart,0);\
}\
}
#define DBG_DEV_WRITE(d,len)\
{\
if(g_data.uart){\
g_data.uart->write(g_data.uart,d,len);\
}\
}
#endif
#define CONSOLEBUF_SIZE 1024
typedef struct{
int inited;
#ifdef RT_THREAD
struct rt_mutex mutex;
#endif
uart_def *uart;
}self_def;
static self_def g_data;
@@ -32,8 +57,8 @@ int debug_init(void)
#ifdef RT_THREAD
rt_mutex_init(&g_data.mutex,"debug_mutex",RT_IPC_FLAG_FIFO);
#endif
DBG_DEV->init();
DBG_DEV->write((const uint8_t *)"\r\n",2);
DBG_DEV_INIT();
DBG_DEV_WRITE((const uint8_t *)"\r\n",2);
g_data.inited=1;
DBG_LOG("debug inited.\r\n");
}
@@ -64,7 +89,7 @@ void debug_log(const char *file,const char *fun,int line,int level,const char *f
va_end(args);
memcpy(&log_buf[length],"\r\n",2);
length+=2;
DBG_DEV->write((const uint8_t *)log_buf,length);
DBG_DEV_WRITE((const uint8_t *)log_buf,length);
#ifdef RT_THREAD
rt_mutex_release(&g_data.mutex);
#endif

View File

@@ -199,7 +199,7 @@ static void protu_set_endecode_fun(protu_def *u)
static int protu_init(void)
{
const sys_param_def *par=sys_param();
const char *name="uart1";
const char *name="host";
protu_def *protu=protu_creat(dev_get(name));
app_variable("protu",protu,0);

View File

@@ -11,14 +11,356 @@
#include "coder_judge.h"
#include "JQ_UIDGenerate.h"
#include "transmit.h"
#include "elec_det.h"
#include "crc.h"
#include "dev_backup.h"
typedef struct{
ucport_def u;
rt_timer_t timer;
}slave_def;
static void slave_del(ucport_def *u)
{
slave_def *s=(slave_def *)u;
CHECK_DO(s->timer,rt_timer_delete);
free(u);
}
// 获取检测结果
static int check_result_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
emit tran_reply_signal(u->p,arr_temp(elec_check_result()));
return 0;
}
static ucport_def *check_result(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_result_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x02,check_result)
// 设置硬件版本号
static int write_hw_version_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
int value=arr_get(data,0)|(arr_get(data,1)<<8);
emit tran_reply_signal(u->p,arr_temp(elec_write_hardversion(value)));
return 0;
}
static ucport_def *write_hw_version(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_hw_version_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x03,write_hw_version)
// 设置电阻校准值
static int write_resistor_cbv_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
int value=arr_get(data,0)|(arr_get(data,1)<<8);
emit tran_reply_signal(u->p,arr_temp(elec_write_resistor_cbv(value)));
return 0;
}
static ucport_def *write_resistor_cbv(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
int value=arr_get(data,0)|(arr_get(data,1)<<8);
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_resistor_cbv_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x04,write_resistor_cbv)
// 测量桥丝阻值
static int check_resistor_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
emit tran_reply_signal(u->p,arr_temp(elec_check_resistor()));
return 0;
}
static ucport_def *check_resistor(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_resistor_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x05,check_resistor)
// 根据方案检测
static int check_with_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
emit tran_reply_signal(u->p,arr_temp(elec_check_with_scheme(data)));
return 0;
}
static ucport_def *check_with_scheme(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_with_scheme_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x0b,check_with_scheme)
transmit_export(ym_slave,0x0c,check_with_scheme)
// 停止上报
static int stop_submit_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
array_def *r=arr_creat();
arr_append(r,0);
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *stop_submit(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=stop_submit_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x14,stop_submit)
// 定义地址宏
// 本程序中程序下载地址不是这个地址,在此用来计算偏移量
#define MCU_APP_ADDR_BASE 0x8004000
#define MCU_TASKID_ADDR_BASE 0x803f000
// 定义升级结构体
typedef struct{
uint8_t device_state;
uint32_t flash_addr;
}updata_def;
static updata_def g_updata;
// 查询设备状态第一次返回在app如果设置了跳转指令则返回在bootloader
// 1:app;2:bootleader
static int device_state_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
array_def *r=arr_creat();
arr_append(r,g_updata.device_state+1);
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *device_state(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=device_state_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0xf9,device_state)
// 跳转至bootloader这里只是改变标志实际还是在app中
static int turn_to_bootloader_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
g_updata.device_state=1;
array_def *r=arr_creat();
arr_append(r,0);
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *turn_to_bootloader(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=turn_to_bootloader_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0xf8,turn_to_bootloader)
// 生成文件头
static uint32_t creat_file_head(uint32_t addr,const char *name)
{
uint8_t *td=calloc(FLASH_FILE_HEAD_SIZE,sizeof(uint8_t));
// 文件大小和文件名
memcpy(td,name,strlen(name));
// used字段
((flash_file *)td)->used=0xffffffff;
flash_write((uint8_t *)addr,td,FLASH_FILE_HEAD_SIZE);
free(td);
return addr+FLASH_FILE_HEAD_SIZE;
}
// 擦除app空间
static int erase_app_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
flash_erase_app2();
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_app2(),"slave_app.pkt");
array_def *r=arr_creat();
arr_append(r,0);
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *erase_app(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=erase_app_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0xfe,erase_app)
// 写入数据
// 因为添加了文件头,实际写入地址应该偏移一个文件头的长度
static int write_data_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
uint32_t addr=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24);
int len=arr_length(data)-4;
int ret=0;
uint32_t offset=addr-MCU_APP_ADDR_BASE;
addr=g_updata.flash_addr+offset;
ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len);
array_def *r=arr_creat();
arr_append(r,(ret!=0));
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *write_data(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_data_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0xfc,write_data)
// 校验并跳转
static int ceck_crc_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
uint32_t addr_start=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24);
uint32_t addr_end=(arr_get(data,4))|(arr_get(data,5)<<8)|(arr_get(data,6)<<16)|(arr_get(data,7)<<24);
uint32_t crc32=(arr_get(data,8))|(arr_get(data,9)<<8)|(arr_get(data,10)<<16)|(arr_get(data,11)<<24);
int len=addr_end-addr_start;
addr_start+=FLASH_FILE_HEAD_SIZE;
int ret=(crc32!=crc_crc32((uint8_t *)addr_start,len));
array_def *r=arr_creat();
arr_append(r,ret);
emit tran_reply_signal(u->p,arr_temp(r));
if(ret==0){
later_execute((void (*)(void *))bk_reboot_app,0,100);
}
return 0;
}
static ucport_def *ceck_crc(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=ceck_crc_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0xfb,ceck_crc)
// 写入数据,这个命令会自动擦除
// 因为添加了文件头,实际写入地址应该偏移一个文件头的长度
static int write_data2_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
uint32_t addr=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24);
int len=arr_length(data)-4;
int ret=0;
if((addr)==MCU_TASKID_ADDR_BASE){
flash_erase_scheme();
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin");
}
uint32_t offset=addr-MCU_TASKID_ADDR_BASE;
addr=g_updata.flash_addr+offset;
ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len);
array_def *r=arr_creat();
arr_append(r,(ret!=0));
emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *write_data2(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
slave_def *u=calloc(1,sizeof(slave_def));
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_data2_dolater;
u->u.dolater(&u->u,cmd,data,"ok");
return (ucport_def *)u;
}
transmit_export(ym_slave,0x11,write_data2)