本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
~~NOCACHE~~ ~~NOTOC~~ <html><style> .dokuwiki h1,.sml-c-wrap h1{font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Helvetica Neue",Arial,sans-serif!important;font-size:22px!important;font-weight:600!important;line-height:1.35!important;letter-spacing:.2px!important;color:#1f2a37!important;font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum" 1,"tnum" 1;border-bottom:1px solid #a2a9b1;padding:0 0 .2em 0!important;margin:0 0 .2em 0!important;} .dokuwiki h2{font-family:Georgia,"Times New Roman","Songti SC",SimSun,serif;font-weight:400;font-size:1.5em;line-height:1.3;border-bottom:1px solid #a2a9b1;padding-bottom:.15em;margin:1.6em 0 .55em;} .dokuwiki h3{font-size:1.02em;font-weight:700;margin:1.3em 0 .35em;} .dokuwiki h4{font-size:.98em;font-weight:700;margin:1.1em 0 .35em;} .dokuwiki .level2{margin-top:0;} #smltoc{border:1px solid #a2a9b1;background:#f9f9f9;padding:11px 17px 13px;display:table;max-width:100%;font-size:14px;line-height:1.6;margin:0 0 1.6em;} #smltoc .hd{text-align:center;font-size:14px;font-weight:700;margin:0 0 9px;padding-bottom:8px;border-bottom:1px solid #d5dce4;color:#1f2a37;letter-spacing:1px;} #smltoc .hd a{font-weight:400;color:#0645ad;cursor:pointer;text-decoration:none;} #smltoc ul.toclist{list-style:none;margin:0;padding:0;} #smltoc ul.toclist li{margin:0;padding:0;list-style:none;background:none;font-size:14px;} #smltoc ul.toclist li.l2{padding-left:1.5em;} #smltoc ul.toclist li.l3{padding-left:2.9em;} #smltoc ul.toclist a{color:#0645ad;text-decoration:none;} #smltoc ul.toclist a:hover{text-decoration:underline;} .dokuwiki pre.code{border:1px solid #c8ccd1;background:#f8f9fa;padding:8px 12px;line-height:1.6;font-size:.88em;border-radius:0;} .dokuwiki pre.code code{font-size:1em;} .dokuwiki code{background:#f8f9fa;border:1px solid #eaecf0;padding:0 2px;} /* 附件下载链接:加重显示,与正文区分 */ #bodyContent a.mediafile.mf_zip{font-weight:600;color:#0b5394!important;text-decoration:none;border-bottom:1px solid #c9dcef;} #bodyContent a.mediafile.mf_zip:hover{color:#0645ad!important;border-bottom-color:#0645ad;background:#f2f7fc;} /* 网盘提取码徽标 */ .sml-code{display:inline-block;background:#eef4fb;border:1px solid #cfe0f2;color:#0b5394;font-weight:700;font-size:.92em;letter-spacing:.4px;padding:1px 8px;border-radius:3px;line-height:1.55;} /* 网盘等外部下载链接:与附件下载链接同款 */ #bodyContent a.urlextern{font-weight:600;color:#0b5394!important;text-decoration:none!important;border-bottom:1px solid #c9dcef;background:none!important;padding-right:0!important;} #bodyContent a.urlextern:hover{color:#0645ad!important;border-bottom-color:#0645ad;background:#f2f7fc!important;} .dokuwiki pre.code{border:1px solid #c8ccd1 !important;background:#f8f9fa !important;} .dokuwiki .media img{border:1px solid #c8ccd1;background:#fff;max-width:100%;height:auto;} .dokuwiki table.inline th{background:#eaecf0;font-weight:700;} .catlinks{display:none !important;} #bodyContent{padding-bottom:68vh;} #p-logo a{background-image:url(/dokuwiki/lib/exe/fetch.php?media=wiki:logo_sml.png)!important;background-size:132px auto!important;background-position:center center!important;background-repeat:no-repeat!important;} /* GPIO 端子脚位方向:醒目提示 */ .sml-gpio{margin:14px 0 18px;padding:11px 15px 12px;border:1px solid #e3b45a;border-left:5px solid #d98b0b;background:#fff9ec;border-radius:3px;line-height:1.65;color:#4a3a1c;} .sml-gpio .gt{font-weight:700;color:#9a5b00;font-size:15px;margin-bottom:5px;} .sml-gpio .gline{display:flex;flex-wrap:wrap;gap:10px;margin:9px 0 8px;} .sml-gpio .gcard{flex:1 1 300px;background:#fff;border:1px solid #ead9b4;border-radius:3px;padding:8px 11px;} .sml-gpio .gcard b{display:block;letter-spacing:.3px;} .sml-gpio .gcard span{display:block;margin-top:3px;font-weight:700;} .sml-gpio .gpo{border-left:4px solid #c0392b;} .sml-gpio .gpo span{color:#c0392b;} .sml-gpio .gpi{border-left:4px solid #1e7a4c;} .sml-gpio .gpi span{color:#1e7a4c;} .sml-gpio .gf{font-size:12.6px;color:#775c27;margin:0;} /* ===== 产品图库:目录右侧展示区 ===== */ .sml-top{display:flex;gap:18px;align-items:flex-start;margin:0 0 1.6em;} .sml-left{flex:0 0 264px;min-width:0;} .sml-left #smltoc{margin:0;width:100%;box-sizing:border-box;} .sml-gallery{position:sticky;top:14px;flex:1 1 auto;min-width:0;border:1px solid #d7e0ea;border-radius:6px;background:linear-gradient(155deg,#fcfdff 0%,#f0f4f9 100%);box-shadow:0 8px 26px rgba(31,42,55,.07);overflow:hidden;font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Helvetica Neue",Arial,sans-serif;font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum" 1,"tnum" 1;} .sml-g-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;padding:9px 16px 8px;border-bottom:1px solid #e2e9f1;} .sml-g-kicker{font-size:9.5px;letter-spacing:1.8px;color:#0b5394;font-weight:700;line-height:1.4;} .sml-g-title{font-size:15px;font-weight:600;color:#1f2a37;line-height:1.4;margin-top:2px;letter-spacing:.2px;} .sml-g-note{font-size:10.5px;color:#7b8794;white-space:nowrap;padding-bottom:2px;} .sml-g-body{display:flex;gap:12px;padding:10px 15px 10px;align-items:stretch;} .sml-g-stage{position:relative;flex:1 1 auto;min-width:0;height:292px;background:#fff;border:1px solid #e6ebf1;border-radius:4px;overflow:hidden;} .sml-g-stage img.sml-g-main{display:block;width:100%!important;height:100%!important;max-width:none!important;object-fit:contain;mix-blend-mode:multiply;transition:opacity .16s ease;} .sml-g-badge{position:absolute;left:0;top:11px;z-index:2;background:#0b5394;color:#fff;font-size:9.5px;font-weight:600;letter-spacing:1.2px;padding:4px 10px 4px 12px;border-radius:0 2px 2px 0;box-shadow:0 2px 6px rgba(11,83,148,.2);} .sml-g-zoom{position:absolute;right:10px;top:10px;z-index:2;font-size:10px;line-height:1.4;color:#0b5394!important;text-decoration:none!important;border:1px solid #c9dcef;background:rgba(255,255,255,.92)!important;padding:3px 8px;border-radius:3px;} .sml-g-zoom:hover{background:#0b5394!important;color:#fff!important;border-color:#0b5394;} .sml-g-cap{position:absolute;left:12px;bottom:9px;z-index:2;font-size:11px;color:#4a5765;letter-spacing:.2px;background:rgba(255,255,255,.88);padding:3px 8px;border-radius:2px;} .sml-g-count{position:absolute;right:12px;bottom:10px;z-index:2;font-size:10px;color:#8a97a5;letter-spacing:1px;} .sml-g-side{flex:0 0 150px;min-width:0;display:flex;flex-direction:column;gap:5px;} .sml-g-side-hd{font-size:9.5px;letter-spacing:1.2px;color:#7b8794;font-weight:700;line-height:1.5;padding:0 1px 1px;} button.sml-g-thumb{flex:1 1 0;min-height:0;display:flex;align-items:center;gap:8px;box-sizing:border-box;margin:0;padding:4px 6px;background:#fff;border:1px solid #dbe3ec;border-radius:3px;cursor:pointer;text-align:left;font-family:inherit;line-height:1.35;transition:border-color .15s,box-shadow .15s,transform .15s;} button.sml-g-thumb:hover{border-color:#8fb2d6;transform:translateX(1px);} button.sml-g-thumb.on{border-color:#0b5394;box-shadow:inset 0 0 0 1px #0b5394;background:#f7fbff;} .sml-g-tn{display:block;flex:0 0 58px;width:58px;height:42px;background:#fbfcfe;border:1px solid #edf1f5;border-radius:2px;overflow:hidden;} .sml-g-tn img{display:block;width:100%!important;height:100%!important;max-width:none!important;object-fit:contain;mix-blend-mode:multiply;} .sml-g-tx{font-size:11px;color:#4a5765;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .sml-g-tx b{display:block;font-size:9px;color:#98a5b3;letter-spacing:1px;font-weight:600;margin-bottom:1px;} button.sml-g-thumb.on .sml-g-tx{color:#0b5394;font-weight:600;} button.sml-g-thumb.on .sml-g-tx b{color:#0b5394;} .sml-g-specs{display:flex;flex-wrap:wrap;border-top:1px solid #e2e9f1;background:rgba(255,255,255,.62);} .sml-g-spec{flex:1 1 130px;min-width:0;padding:7px 12px 8px;border-right:1px solid #e2e9f1;box-sizing:border-box;} .sml-g-spec:last-child{border-right:0;} .sml-g-spec b{display:block;font-size:11.5px;color:#0b5394;font-weight:700;line-height:1.5;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .sml-g-spec em{display:block;font-style:normal;font-size:10px;color:#6b7785;line-height:1.5;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .sml-g-apps{display:flex;align-items:center;gap:8px;padding:6px 14px 8px;border-top:1px solid #e2e9f1;font-size:10.5px;color:#5a6674;flex-wrap:wrap;} .sml-g-apps .t{font-weight:700;color:#1f2a37;letter-spacing:.5px;margin-right:2px;} .sml-g-apps .chip{border:1px solid #d7e0ea;background:#fff;border-radius:2px;padding:2px 8px;color:#4a5765;} @media (max-width:1200px){.sml-left{flex-basis:220px;}} @media (max-width:1100px){.sml-top{flex-direction:column;}.sml-left{flex:1 1 auto;width:100%;}.sml-gallery{order:-1;position:static;width:100%;box-sizing:border-box;}.sml-g-note{display:none;}} @media (max-width:900px){.sml-g-body{flex-direction:column;}.sml-g-stage{height:220px;}.sml-g-side{flex:1 1 auto;flex-direction:row;flex-wrap:nowrap;}button.sml-g-thumb{flex:1 1 0;min-width:0;flex-direction:column;text-align:center;gap:3px;padding:5px 3px 6px;}.sml-g-tn{flex:none;width:100%;height:36px;}.sml-g-tx{font-size:10px;text-align:center;}.sml-g-tx b{display:none;}.sml-g-side-hd{display:none;}.sml-g-spec{flex:1 1 50%;}} @media (max-width:520px){.sml-g-stage{height:180px;}.sml-g-cap{font-size:10px;}.sml-g-zoom{font-size:10px;}} /* ===== 正文:企业级文档排版规范(单主色 / 统一字体 / 固定层级) ===== */ #bodyContent{font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Helvetica Neue",Arial,sans-serif;font-size:14px;line-height:1.75;color:#1f2a37;} #bodyContent p{margin:0 0 1em;max-width:1040px;} #bodyContent a{color:#0b5394;} #bodyContent a:hover{color:#083f70;} /* 章标题:以字号/字重/留白建立力度,主色仅作竖线与短线,不用色块 */ #bodyContent h2{position:relative;font-family:inherit!important;font-size:25px!important;font-weight:700!important;line-height:1.35!important;color:#152234!important;letter-spacing:.3px;background:none!important;border:0!important;border-bottom:1px solid #dfe5ec!important;border-radius:0;padding:0 0 15px 19px!important;margin:3em 0 1.55em!important;} #bodyContent h2::before{content:"";position:absolute;left:0;top:4px;bottom:19px;width:4px;background:#0b5394;border-radius:1px;} #bodyContent h2::after{content:"";position:absolute;left:0;bottom:-1px;width:60px;height:2px;background:#0b5394;} #bodyContent h3{font-family:inherit!important;font-size:16.5px!important;font-weight:700!important;line-height:1.5!important;color:#152234!important;border:0!important;border-left:3px solid #7fa3c6!important;border-radius:0;padding:2px 0 2px 12px!important;margin:2.1em 0 .85em!important;} #bodyContent h4{font-family:inherit!important;font-size:14.5px!important;font-weight:700!important;line-height:1.5!important;color:#33475d!important;border:0!important;padding:0!important;margin:1.7em 0 .55em!important;} /* 表格:浅灰表头 + 一条主色底线 + 纯横线网格(去掉深蓝实心表头与竖线) */ #bodyContent table.inline{border-collapse:collapse;width:auto;max-width:100%;margin:1.25em 0 1.9em;font-size:13.5px;line-height:1.7;border:1px solid #e1e7ee;} #bodyContent table.inline th{background:#f2f5f9!important;color:#1f2a37!important;font-weight:700!important;font-size:12.5px;letter-spacing:.6px;padding:10px 16px!important;border:0!important;border-bottom:2px solid #0b5394!important;text-align:left;white-space:nowrap;} #bodyContent table.inline td{padding:9px 16px!important;border:0!important;border-bottom:1px solid #e9edf2!important;color:#243447;vertical-align:middle;} #bodyContent table.inline tr:last-child td{border-bottom:0!important;} #bodyContent table.inline tr:nth-child(even) td{background:#fafbfd;} #bodyContent table.inline tr:hover td{background:#f1f6fb;} #bodyContent table.inline td:first-child{font-weight:600;color:#152234;} /* 代码块:整体压低对比,只留细线与灰色语言标签 */ #bodyContent pre.code,#bodyContent pre.file{position:relative;background:#f9fafc!important;border:1px solid #e2e8ef!important;border-left:2px solid #a9bfd5!important;border-radius:3px;padding:28px 14px 12px!important;margin:.9em 0 1.3em;font:12.5px/1.65 "Cascadia Mono",Consolas,"SFMono-Regular",Menlo,monospace!important;color:#243447;overflow-x:auto;white-space:pre;} #bodyContent pre.code::before,#bodyContent pre.file::before{content:"CODE";position:absolute;left:0;right:0;top:0;height:22px;box-sizing:border-box;background:transparent;border-bottom:1px solid #e9edf2;padding:0 14px;font:600 10px/21px "Microsoft YaHei",Arial,sans-serif!important;letter-spacing:1.2px;color:#8794a4;} #bodyContent pre.code.bash::before{content:"SHELL / BASH";} #bodyContent pre.code.java::before{content:"JAVA";} #bodyContent pre.code code,#bodyContent pre.file code{background:none!important;border:0!important;padding:0!important;color:inherit!important;font-size:1em!important;} /* 行内代码 */ #bodyContent code{background:#eef2f7;border:1px solid #dfe6ee;border-radius:3px;padding:1px 5px;color:#0b5394;font-family:Consolas,Monaco,monospace;font-size:.9em;} /* 有序 / 无序列表:主色数字块与方点 */ #bodyContent ol{counter-reset:smlstep;list-style:none!important;padding-left:0!important;margin:.9em 0 1.3em;} #bodyContent ol li{counter-increment:smlstep;position:relative;padding-left:32px;margin:.45em 0;line-height:1.7;} #bodyContent ol li::before{content:counter(smlstep);position:absolute;left:0;top:2px;width:21px;height:21px;box-sizing:border-box;background:#eef4fb;border:1px solid #cfe0f2;border-radius:3px;color:#0b5394;font:600 11px/19px "Microsoft YaHei",Arial,sans-serif;text-align:center;} #bodyContent ul:not(.toclist){list-style:none!important;padding-left:0!important;margin:.9em 0 1.3em;} #bodyContent ul:not(.toclist) li{position:relative;padding-left:19px;margin:.4em 0;line-height:1.7;} #bodyContent ul:not(.toclist) li::before{content:"";position:absolute;left:3px;top:.68em;width:6px;height:6px;background:#0b5394;border-radius:1px;} /* 正文图片 */ #bodyContent .media img{border:1px solid #dfe6ee;border-radius:4px;background:#fff;padding:4px;box-shadow:0 2px 12px rgba(31,42,55,.07);max-width:100%;height:auto;box-sizing:border-box;} /* 附件下载:统一按钮 */ #bodyContent a.mediafile.mf_zip{display:inline-block!important;background:#eef4fb!important;border:1px solid #cfe0f2!important;border-left:3px solid #0b5394!important;border-radius:3px;padding:5px 12px!important;margin:.3em 0;line-height:1.5;font-weight:600!important;color:#0b5394!important;text-decoration:none!important;} #bodyContent a.mediafile.mf_zip::before{content:"\2193";margin-right:8px;font-weight:700;} #bodyContent a.mediafile.mf_zip:hover{background:#0b5394!important;color:#fff!important;border-color:#0b5394!important;} /* 提示 / 注意:统一的 NOTE 块,弱化为中性灰底,避免蓝色块重复堆叠 */ #bodyContent p.sml-note{background:#f8fafc;border:1px solid #e4eaf1;border-left:3px solid #a9bfd5;border-radius:3px;padding:8px 14px!important;margin:.9em 0 1.3em!important;color:#3b4a5c;font-size:13px;line-height:1.7;} /* ===== 产品规格数据:高规格输出(仅第 1 / 2 章,由 enhanceSpec 打标) ===== */ #bodyContent .sml-spec{max-width:1040px;box-sizing:border-box;margin:1.35em 0 2em;} #bodyContent .sml-spec table.inline{width:100%;border:0!important;font-size:13.5px;line-height:1.65;} #bodyContent .sml-spec.sml-wide table.inline{min-width:760px;} #bodyContent .sml-spec table.inline th{background:#fff!important;color:#5d6c7e!important;font-size:11px!important;letter-spacing:1.2px;font-weight:700!important;padding:9px 18px!important;border:0!important;border-bottom:1px solid #cfd9e4!important;border-top:1px solid #e1e7ee!important;text-align:left;} #bodyContent .sml-spec table.inline td{padding:9px 18px!important;border:0!important;border-bottom:1px solid #edf1f5!important;color:#243447;font-size:13.5px;font-variant-numeric:lining-nums tabular-nums;} #bodyContent .sml-spec table.inline th:first-child,#bodyContent .sml-spec table.inline td:first-child{width:22%;background:#f7f9fc!important;color:#152234!important;font-weight:700;} #bodyContent .sml-spec table.inline tr:nth-child(even) td{background:#fff!important;} #bodyContent .sml-spec table.inline tr:nth-child(even) td:first-child{background:#f7f9fc!important;} #bodyContent .sml-spec table.inline tr:hover td{background:#f4f8fd!important;} #bodyContent .sml-spec table.inline tr:hover td:first-child{background:#eef4fb!important;} #bodyContent .sml-spec table.inline tr:last-child td{border-bottom:1px solid #e1e7ee!important;} /* 主规格表:带表头元信息条的规格卡 */ #bodyContent .sml-spec.sml-featured{background:#fff;border:1px solid #e1e7ee;border-top:0;border-radius:0 0 4px 4px;padding:0 0 4px;box-shadow:0 2px 10px rgba(31,42,55,.035);} #bodyContent .sml-spec.sml-featured .sml-spec-hd{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 18px;border-top:2px solid #0b5394;background:#fbfcfe;border-bottom:1px solid #e6ebf1;} #bodyContent .sml-spec-kick{font:700 10px/1.4 "Microsoft YaHei",Arial,sans-serif;letter-spacing:1.8px;color:#0b5394;} #bodyContent .sml-spec-meta{font:600 10px/1.4 "Microsoft YaHei",Arial,sans-serif;letter-spacing:1px;color:#8794a4;white-space:nowrap;} #bodyContent .sml-spec.sml-featured table.inline th{border-top:0!important;} /* 2.1 整机外观:双列图版 */ #bodyContent .sml-spec.sml-figgrid table.inline{width:100%;table-layout:fixed;border:0!important;} #bodyContent .sml-spec.sml-figgrid table.inline tr th,#bodyContent .sml-spec.sml-figgrid table.inline tr th:first-child{width:50%;background:#fff!important;border:0!important;border-bottom:1px solid #e1e7ee!important;text-align:center!important;font-size:11px;letter-spacing:1px;color:#5d6c7e;font-weight:700;padding:9px 12px!important;} #bodyContent .sml-spec.sml-figgrid table.inline tr td,#bodyContent .sml-spec.sml-figgrid table.inline tr td:first-child{width:50%;background:#fff!important;border:0!important;border-bottom:1px solid #eef1f5!important;padding:13px 14px 14px!important;text-align:center;color:#6b7a8c;font-size:12px;line-height:1.6;font-weight:400;} #bodyContent .sml-spec.sml-figgrid td a.media{display:block;width:100%;text-align:center;} #bodyContent .sml-spec.sml-figgrid img.media{display:block;width:84%!important;max-width:84%!important;height:auto!important;margin:0 auto 8px;border:1px solid #e6ebf1!important;border-radius:4px;padding:0!important;box-shadow:0 2px 10px rgba(31,42,55,.055);background:#fff;mix-blend-mode:multiply;} #bodyContent .sml-spec.sml-figgrid tr:last-child td{border-bottom:0!important;} /* 2.2 接口示意 / 机械尺寸:独立图版 */ #bodyContent p.sml-figure{max-width:960px;box-sizing:border-box;text-align:center;background:#fff;border:1px solid #e6ebf1;border-radius:4px;padding:12px 16px;margin:1.2em 0 1.6em!important;box-shadow:0 2px 10px rgba(31,42,55,.035);} #bodyContent p.sml-figure img.media{width:auto;max-width:520px;height:auto;border:0!important;padding:0!important;box-shadow:none!important;background:#fff;} /* 大图版(?760):机械尺寸等技术图需要放大到能读清尺寸数字,窄屏仍不溢出 */ #bodyContent p.sml-figure img.media[width="760"]{max-width:min(760px,100%);} /* 2.2 接口概览:并入 2.1 同款双列图版,接口图为可点击放大的技术图 */ #bodyContent .sml-spec.sml-figgrid td a.media{cursor:zoom-in;} #bodyContent .sml-spec.sml-figgrid td a.media img.media{mix-blend-mode:normal;} /* 次级产品数据:整机规格 / 型号与配置两张主表(.sml-keep)保持原状,其余统一收一档 */ #bodyContent .sml-spec:not(.sml-keep){max-width:960px;margin:1.2em 0 1.7em;} #bodyContent .sml-spec:not(.sml-keep) table.inline{font-size:13px;line-height:1.55;} #bodyContent .sml-spec:not(.sml-keep) table.inline th{font-size:10.5px!important;padding:8px 16px!important;} #bodyContent .sml-spec:not(.sml-keep) table.inline td{padding:7px 16px!important;font-size:13px;} #bodyContent .sml-spec:not(.sml-keep) table.inline th:first-child,#bodyContent .sml-spec:not(.sml-keep) table.inline td:first-child{width:20%;} #bodyContent .sml-spec:not(.sml-keep).sml-featured .sml-spec-hd{padding:8px 16px;} #bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr th,#bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr th:first-child{padding:8px 10px!important;} #bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr td,#bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr td:first-child{padding:10px 12px 11px!important;} #bodyContent .sml-spec:not(.sml-keep).sml-figgrid img.media{width:70%!important;max-width:70%!important;} /* 宽表格独立横向滚动,避免窄屏整页横向溢出 */ .sml-tw{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1.2em 0 1.8em;} #bodyContent .sml-tw table.inline{margin:0;max-width:none;} @media (max-width:1100px){ #bodyContent p{max-width:none;} #bodyContent table.inline th{white-space:normal;padding:7px 10px!important;} #bodyContent table.inline td{padding:7px 10px!important;} #bodyContent .sml-spec,#bodyContent .sml-spec:not(.sml-keep){max-width:100%;} #bodyContent .sml-spec table.inline th,#bodyContent .sml-spec table.inline td{padding:8px 12px!important;} #bodyContent .sml-spec.sml-featured .sml-spec-hd{padding:10px 12px;} #bodyContent .sml-spec.sml-figgrid table.inline tr td,#bodyContent .sml-spec.sml-figgrid table.inline tr td:first-child{padding:10px 8px 12px!important;} #bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr td,#bodyContent .sml-spec:not(.sml-keep).sml-figgrid table.inline tr td:first-child{padding:9px 8px 11px!important;} #bodyContent p.sml-figure{max-width:100%;padding:12px 10px;} #bodyContent p.sml-figure img.media{max-width:100%;} } @media (max-width:760px){ #bodyContent .sml-spec:not(.sml-keep).sml-figgrid img.media{width:100%!important;max-width:100%!important;} } /* ===== 第 3 章起 · 文档区:统一版心 + 发布级命令行引用块 ===== */ /* 统一阅读版心:正文 / 列表 / 表格 / 提示 / 图版共用一条右边界 */ #bodyContent .sml-doc p, #bodyContent .sml-doc ol, #bodyContent .sml-doc ul:not(.toclist){max-width:min(100%,780px);} #bodyContent .sml-doc p{margin:0 0 .85em;} #bodyContent .sml-doc .sml-tw{max-width:min(100%,820px);margin:1.05em 0 1.5em;} #bodyContent .sml-doc table.inline{margin:0;} #bodyContent .sml-doc table.inline th{background:#f4f7fb!important;font-size:12px!important;letter-spacing:.4px;padding:8px 14px!important;} #bodyContent .sml-doc table.inline td{padding:7px 14px!important;font-size:13px;} /* 代码块:官网发布级「命令行引用」—— 单色、无标签条、无边框圆角、三档对齐 */ #bodyContent .sml-doc pre.code, #bodyContent .sml-doc pre.file{ display:block!important; width:fit-content!important; min-width:min(100%,480px)!important; max-width:min(100%,860px)!important; box-sizing:border-box!important; margin:1.05em 0 1.5em!important; padding:14px 20px 14px 18px!important; background:#f7f9fb!important; border:0!important; border-left:2px solid #7fa3c6!important; border-radius:0!important; box-shadow:none!important; font:13px/1.8 "Cascadia Mono",Consolas,"SFMono-Regular",Menlo,monospace,"Microsoft YaHei",sans-serif!important; color:#243447!important; overflow-x:auto!important; } /* 去掉语言标签条,只保留命令本身 */ #bodyContent .sml-doc pre.code::before, #bodyContent .sml-doc pre.file::before{content:none!important;display:none!important;} /* 语法高亮压成单色:注释淡灰且不倾斜,其余全部墨色 */ #bodyContent .sml-doc pre.code span[class], #bodyContent .sml-doc pre.file span[class]{color:inherit!important;font-style:normal!important;font-weight:inherit!important;background:none!important;text-decoration:none!important;} #bodyContent .sml-doc pre.code span[class^="co"], #bodyContent .sml-doc pre.file span[class^="co"]{color:#8a97a5!important;} #bodyContent .sml-doc pre.code code, #bodyContent .sml-doc pre.file code{font-size:1em!important;background:none!important;border:0!important;color:inherit!important;} /* 按内容宽度归档,右边界只有三条对齐线 */ #bodyContent .sml-doc pre.code.sml-cw1, #bodyContent .sml-doc pre.file.sml-cw1{width:480px!important;} #bodyContent .sml-doc pre.code.sml-cw2, #bodyContent .sml-doc pre.file.sml-cw2{width:640px!important;} #bodyContent .sml-doc pre.code.sml-cw3, #bodyContent .sml-doc pre.file.sml-cw3{width:860px!important;} /* 提示块:同样收进版心,弱化底色与边框 */ #bodyContent .sml-doc p.sml-note{ width:fit-content; min-width:min(100%,320px); max-width:min(100%,780px); box-sizing:border-box; margin:.9em 0 1.35em!important; padding:8px 16px!important; background:#f7f9fb!important; border:0!important; border-left:2px solid #7fa3c6!important; border-radius:0!important; font-size:13px;line-height:1.7;color:#4a5765; } /* 截图类图片:细线边界,无阴影 */ #bodyContent .sml-doc p > a.media > img.media{ max-width:min(100%,780px); border:1px solid #e6ebf1!important; border-radius:3px!important; box-shadow:none!important; } /* 章标题横线也收进同一版心,右边界与正文对齐 */ #bodyContent h2.sml-doc{max-width:min(100%,780px);box-sizing:border-box;} /* 小节留白收紧,标题层级更利落 */ #bodyContent h3.sml-doc{margin:1.8em 0 .7em!important;} #bodyContent h4.sml-doc{margin:1.35em 0 .5em!important;} @media (max-width:760px){ #bodyContent .sml-doc pre.code, #bodyContent .sml-doc pre.file, #bodyContent .sml-doc p.sml-note{min-width:min(100%,240px)!important;} } </style></html> <html><script> (function(){ /* 页面标题取正文里的产品 H1,避免写死型号;需等 H1 渲染后再设 */ function setTitle(){ var h=document.querySelector('#bodyContent h1'); var t=h?h.textContent.trim():''; if(t) document.title=t+' - 思迈联科'; } if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',setTitle);}else{setTitle();} })(); </script></html> <html><script> (function(){ function bind(){ var hd=document.getElementById('smltoc-hd'); if(!hd) return; hd.onclick=function(){ var u=document.getElementById('smltoc-list'); if(!u) return; var on = (u.style.display==='none'); u.style.display = on ? '' : 'none'; hd.querySelector('a').textContent = on ? '[隐藏]' : '[显示]'; }; } if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',bind);}else{bind();} })(); </script></html> <html><h1 style="margin:0 0 .2em 0;padding:0;">sTPC-EXXX-3568B系列</h1></html> <html><p style="font-size:13px;color:#54595d;margin:0 0 1.1em 0;">产品系列:sTPC-EXXX-3568B(E101 / E121 / E150 / E156 / E170 / E215) · 瑞芯微 RK3568 · 10.1″ ~ 21.5″ 无风扇 ARM 触控一体机(PANEL PC)</p></html> <html><div class="sml-top"><div class="sml-left"><div id="smltoc"> <div class="hd" id="smltoc-hd">目录 <a>[隐藏]</a></div> <ul class="toclist" id="smltoc-list"> <li class="l1"><a href="#资源特性">1 资源特性</a></li> <li class="l2"><a href="#产品简介">1.1 产品简介</a></li> <li class="l2"><a href="#整机规格">1.2 整机规格</a></li> <li class="l2"><a href="#型号与配置">1.3 型号与配置</a></li> <li class="l2"><a href="#可选配件">1.4 可选配件</a></li> <li class="l1"><a href="#接口布局和尺寸">2 接口布局和尺寸</a></li> <li class="l2"><a href="#整机外观">2.1 整机外观</a></li> <li class="l2"><a href="#接口概览">2.2 接口概览</a></li> <li class="l2"><a href="#接口引脚定义">2.3 接口引脚定义</a></li> <li class="l2"><a href="#机械尺寸">2.4 机械尺寸</a></li> <li class="l1"><a href="#快速入门">3 快速入门</a></li> <li class="l2"><a href="#系统下载">3.1 系统下载</a></li> <li class="l2"><a href="#烧录工具下载">3.2 烧录工具下载</a></li> <li class="l2"><a href="#系统烧录">3.3 系统烧录</a></li> <li class="l2"><a href="#u盘升级">3.4 U盘升级</a></li> <li class="l3"><a href="#准备_updateimg">3.4.1 准备 update.img</a></li> <li class="l3"><a href="#u盘本地升级">3.4.2 U盘本地升级</a></li> <li class="l1"><a href="#android系统的使用">4 Android系统的使用</a></li> <li class="l2"><a href="#开启adb调试">4.1 开启ADB调试</a></li> <li class="l3"><a href="#usb_adb使用方法">4.1.1 USB ADB使用方法</a></li> <li class="l3"><a href="#网络adb使用方法">4.1.2 网络ADB使用方法</a></li> <li class="l2"><a href="#wifi使用方法">4.2 WiFi使用方法</a></li> <li class="l2"><a href="#以太网使用方法">4.3 以太网使用方法</a></li> <li class="l2"><a href="#g模块使用方法">4.4 4G模块使用方法</a></li> <li class="l3"><a href="#支持列表">4.4.1 支持列表</a></li> <li class="l3"><a href="#步骤">4.4.2 步骤</a></li> <li class="l2"><a href="#串口使用方法">4.5 串口使用方法</a></li> <li class="l3"><a href="#测试工具_comassistant">4.5.1 测试工具 ComAssistant</a></li> <li class="l3"><a href="#测试方式">4.5.2 测试方式</a></li> <li class="l3"><a href="#应用层调用">4.5.3 应用层调用</a></li> <li class="l2"><a href="#usb与sd卡">4.6 USB与SD卡</a></li> <li class="l2"><a href="#音频测试">4.7 音频测试</a></li> <li class="l2"><a href="#hdmi与双屏显示">4.8 HDMI与双屏显示</a></li> <li class="l2"><a href="#按键与指示灯测试">4.9 按键与指示灯测试</a></li> <li class="l2"><a href="#触摸屏测试">4.10 触摸屏测试</a></li> <li class="l2"><a href="#gpio使用方法">4.11 GPIO使用方法</a></li> <li class="l2"><a href="#api参考与使用">4.12 API参考与使用</a></li> <li class="l3"><a href="#使用说明">4.12.1 使用说明</a></li> <li class="l3"><a href="#硬件及系统信息查询">4.12.2 硬件及系统信息查询</a></li> <li class="l3"><a href="#显示控制_display">4.12.3 显示控制(display_)</a></li> <li class="l3"><a href="#gpio控制_gpio">4.12.4 GPIO控制(gpio_)</a></li> <li class="l3"><a href="#串口控制_uart">4.12.5 串口控制(uart_)</a></li> <li class="l3"><a href="#系统控制_sysctrl">4.12.6 系统控制(sysctrl_)</a></li> <li class="l2"><a href="#ota在线升级_android">4.13 OTA在线升级(Android)</a></li> <li class="l1"><a href="#linux系统的使用">5 Linux系统的使用</a></li> <li class="l2"><a href="#声卡使用方法">5.1 声卡使用方法</a></li> <li class="l2"><a href="#网络使用方法">5.2 网络使用方法</a></li> <li class="l3"><a href="#以太网">5.2.1 以太网</a></li> <li class="l3"><a href="#wifi">5.2.2 WiFi</a></li> <li class="l2"><a href="#串口使用方法_linux">5.3 串口使用方法(Linux)</a></li> <li class="l2"><a href="#gpio使用方法_sysfs">5.4 GPIO使用方法(sysfs)</a></li> <li class="l2"><a href="#usb与sd卡挂载">5.5 USB与SD卡挂载</a></li> <li class="l2"><a href="#分辨率与hdmi">5.6 分辨率与HDMI</a></li> <li class="l2"><a href="#远程访问及文件传输">5.7 远程访问及文件传输</a></li> <li class="l2"><a href="#开机自动执行程序">5.8 开机自动执行程序</a></li> <li class="l3"><a href="#登录前执行">5.8.1 登录前执行</a></li> <li class="l3"><a href="#登录后执行">5.8.2 登录后执行</a></li> <li class="l3"><a href="#进入图形界面后执行">5.8.3 进入图形界面后执行</a></li> <li class="l2"><a href="#界面与显示自定义">5.9 界面与显示自定义</a></li> <li class="l3"><a href="#状态栏自定义">5.9.1 状态栏自定义</a></li> <li class="l3"><a href="#屏蔽桌面环境">5.9.2 屏蔽桌面环境</a></li> <li class="l3"><a href="#更换开机logo">5.9.3 更换开机LOGO</a></li> <li class="l3"><a href="#切换不同lcd显示屏">5.9.4 切换不同LCD显示屏</a></li> <li class="l3"><a href="#屏幕旋转">5.9.5 屏幕旋转</a></li> <li class="l2"><a href="#ota在线升级固件">5.10 OTA在线升级固件</a></li> <li class="l3"><a href="#通过网络ota">5.10.1 通过网络OTA</a></li> <li class="l3"><a href="#使用u盘在线升级">5.10.2 使用U盘在线升级</a></li> <li class="l2"><a href="#交叉编译环境">5.11 交叉编译环境</a></li> <li class="l3"><a href="#apt安装交叉编译环境">5.11.1 apt安装交叉编译环境</a></li> <li class="l3"><a href="#下载指定版本工具链">5.11.2 下载指定版本工具链</a></li> <li class="l3"><a href="#工具链下载">5.11.3 工具链下载</a></li> <li class="l2"><a href="#qt应用开发">5.12 Qt应用开发</a></li> <li class="l3"><a href="#导入docker镜像编译">5.12.1 导入Docker镜像编译</a></li> <li class="l3"><a href="#板端搭建qt编译环境">5.12.2 板端搭建Qt编译环境</a></li> <li class="l2"><a href="#视频硬件编解码支持">5.13 视频硬件编解码支持</a></li> <li class="l1"><a href="#通用方法">6 通用方法</a></li> <li class="l2"><a href="#查看cpu温度">6.1 查看CPU温度</a></li> <li class="l2"><a href="#查看cpu序列号">6.2 查看CPU序列号</a></li> <li class="l2"><a href="#查看cpu频率">6.3 查看CPU频率</a></li> <li class="l2"><a href="#查看内存容量">6.4 查看内存容量</a></li> <li class="l2"><a href="#查看存储容量">6.5 查看存储容量</a></li> <li class="l2"><a href="#网络ping测试">6.6 网络Ping测试</a></li> <li class="l2"><a href="#设置系统时间保存到rtc芯片">6.7 设置系统时间保存到RTC芯片</a></li> <li class="l1"><a href="#附录">7 附录</a></li> <li class="l2"><a href="#常见问题排查">7.1 常见问题排查</a></li> <li class="l2"><a href="#文档信息与修订记录">7.2 文档信息与修订记录</a></li> <li class="l2"><a href="#技术支持">7.3 技术支持</a></li> </ul> </div></div> <div class="sml-gallery"> <div class="sml-g-head"><div><div class="sml-g-kicker">PRODUCT GALLERY / 产品图库</div><div class="sml-g-title">sTPC-EXXX-3568B 系列 · 整机外观</div></div><div class="sml-g-note">以 E156 机型为例 · 点击右侧视角切换</div></div> <div class="sml-g-body"><div class="sml-g-stage"><img id="sml-g-main" class="sml-g-main" src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_front_view_v.jpg" alt="正面视图 · 电容触控前面板"><div class="sml-g-badge">INDUSTRIAL PANEL PC</div><a id="sml-g-zoom" class="sml-g-zoom" href="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_front_view.jpg" target="_blank" rel="noopener">查看高清原图 ↗</a><div class="sml-g-cap" id="sml-g-cap">正面视图 · 电容触控前面板</div><div class="sml-g-count" id="sml-g-count">01 / 05</div></div><div class="sml-g-side"><div class="sml-g-side-hd">整机视角 / 05 VIEWS</div><button type="button" class="sml-g-thumb on" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_front_view_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_front_view.jpg" data-idx="01" data-cap="正面视图 · 电容触控前面板"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_thumb_02.jpg" alt="正面视图"></span><span class="sml-g-tx"><b>VIEW 01</b>正面视图</span></button><button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_perspective_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_perspective.jpg" data-idx="02" data-cap="立体视图 · 整机结构与背部扩展舱"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_thumb_01.jpg" alt="立体视图"></span><span class="sml-g-tx"><b>VIEW 02</b>立体视图</span></button><button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_back_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_back.jpg" data-idx="03" data-cap="背面视图 · 全封闭铝合金后箱"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_thumb_03.jpg" alt="背面视图"></span><span class="sml-g-tx"><b>VIEW 03</b>背面视图</span></button><button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_io_lower_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_io_lower.jpg" data-idx="04" data-cap="接口视图 · 下侧对外 I/O 集中布置"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_thumb_04.jpg" alt="下侧 I/O"></span><span class="sml-g-tx"><b>VIEW 04</b>下侧 I/O</span></button><button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_io_upper_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_3568b_io_upper.jpg" data-idx="05" data-cap="接口视图 · 背部天线与扩展接口"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_e156_thumb_05.jpg" alt="扩展接口"></span><span class="sml-g-tx"><b>VIEW 05</b>扩展接口</span></button></div></div> <div class="sml-g-specs"><div class="sml-g-spec"><b>RK3568</b><em>四核 Cortex-A55 · 1TOPS NPU</em></div><div class="sml-g-spec"><b>10.1″–21.5″</b><em>六种尺寸 · 电容触控</em></div><div class="sml-g-spec"><b>无风扇全封闭</b><em>VESA / 嵌入式安装</em></div><div class="sml-g-spec"><b>双系统可选</b><em>Android 11 / Ubuntu 20.04</em></div></div> <div class="sml-g-apps"><span class="t">典型应用</span><span class="chip">产线看板</span><span class="chip">设备 HMI</span><span class="chip">自助查询终端</span><span>工业现场长期稳定运行</span></div> </div> </div></html> <html><script> (function(){ function wrapTables(){ var ts=document.querySelectorAll('#bodyContent table.inline'); for(var i=0;i<ts.length;i++){ var t=ts[i], pn=t.parentNode; if(!pn) continue; if(String(pn.className||'').indexOf('sml-tw')>=0) continue; var w=document.createElement('div'); w.className='sml-tw'; pn.insertBefore(w,t); w.appendChild(t); } } function markNotes(){ var ps=document.querySelectorAll('#bodyContent p'); for(var i=0;i<ps.length;i++){ if(/^(提示|注意|说明)[::]/.test(ps[i].textContent.trim())) ps[i].classList.add('sml-note'); } } /* 第 1 / 2 章的产品规格数据:铺满宽度、规格卡头、图版化、外观图取原图 */ function enhanceSpec(){ var c=document.getElementById('bodyContent'); if(!c) return; var h2s=[].slice.call(c.querySelectorAll('h2')); function inProduct(y){ var ch=null; for(var j=0;j<h2s.length;j++){ if(h2s[j].getBoundingClientRect().top+window.pageYOffset<=y+4) ch=h2s[j]; else break; } return ch && /^[12][^0-9]/.test(ch.textContent.trim()); } var ts=[].slice.call(c.querySelectorAll('table.inline')); for(var i=0;i<ts.length;i++){ var t=ts[i], w=t.parentNode; if(!w || String(w.className||'').indexOf('sml-tw')<0) continue; if(String(w.className).indexOf('sml-spec')>=0) continue; if(!inProduct(t.getBoundingClientRect().top+window.pageYOffset)) continue; var cols=t.rows[0]?t.rows[0].cells.length:0; var rows=Math.max(0,t.rows.length-1); var cls='sml-tw sml-spec'; var fig=t.querySelector('img.media')!==null; if(cols>=5) cls+=' sml-wide'; if(fig) cls+=' sml-figgrid'; var featured=(!fig)&&(rows>=10||cols>=7); if(featured) cls+=' sml-featured'; /* 整机规格(26x2) 与 型号与配置(6x8) 两张主表保持现状,其余统一收一档 */ var keep=(!fig)&&(((rows>=15)&&(cols<=2))||(cols>=7)); if(keep) cls+=' sml-keep'; w.className=cls; if(featured){ var hd=document.createElement('div'); hd.className='sml-spec-hd'; var k=document.createElement('span'); k.className='sml-spec-kick'; k.textContent=(rows>=15?'PRODUCT SPECIFICATION':'PRODUCT DATA'); var m=document.createElement('span'); m.className='sml-spec-meta'; m.textContent=rows+' ITEMS'+(cols>2?' / '+cols+' FIELDS':''); hd.appendChild(k); hd.appendChild(m); w.insertBefore(hd,t); } if(fig){ var imgs=t.querySelectorAll('img.media'); for(var z=0;z<imgs.length;z++){ var s=imgs[z].getAttribute('src')||''; var mm=s.match(/media=([^&]+)/); if(mm && /[?&]w=/.test(s)){ imgs[z].setAttribute('src',s.split('?')[0]+'?media='+mm[1]); imgs[z].removeAttribute('width'); imgs[z].removeAttribute('height'); } } } } var fimgs=[].slice.call(c.querySelectorAll('a.media > img.media')); for(var n=0;n<fimgs.length;n++){ var im=fimgs[n]; if(im.closest('table')) continue; var host=im.parentNode.parentNode; if(!host||host.tagName!=='P'||String(host.className).indexOf('sml-figure')>=0) continue; if(!inProduct(im.getBoundingClientRect().top+window.pageYOffset)) continue; host.className='sml-figure'; } } /* 第三章「快速入门」起:给文档区打统一版心标记 */ function markDoc(){ var c=document.getElementById('bodyContent'); if(!c) return; var hs=[].slice.call(c.querySelectorAll('h2')); var start=null; for(var i=0;i<hs.length;i++){ if(/^3[\s\u3000]/.test(hs[i].textContent.trim())){start=hs[i];break;} } if(!start) start=document.getElementById('快速入门'); if(!start) return; var e=start; while(e){ if(e.nodeType===1) e.classList.add('sml-doc'); e=e.nextElementSibling; } } /* 命令行块宽度归档:按内容归入 480 / 640 / 820 三档,右边界成列 */ function sizeCode(){ var ps=[].slice.call(document.querySelectorAll('#bodyContent .sml-doc pre.code,#bodyContent .sml-doc pre.file')); var need=ps.map(function(e){ e.classList.remove('sml-cw1','sml-cw2','sml-cw3'); return e.getBoundingClientRect().width; }); ps.forEach(function(e,i){ e.classList.add('sml-cw'+(need[i]<=480?1:(need[i]<=640?2:3))); }); } /* 图版内的图片(第 2 章 接口 / 外观):点击在新窗口打开原图 */ function bigImage(){ var as=document.querySelectorAll('#bodyContent .sml-figgrid td a.media'); for(var i=0;i<as.length;i++){ var h=as[i].getAttribute('href')||''; var base=h.split('/lib/exe/')[0]; if(!base) continue; var m=h.match(/[?&]media=([^&]+)/); if(!m) continue; as[i].setAttribute('href',base+'/lib/exe/fetch.php?media='+m[1]); as[i].setAttribute('target','_blank'); as[i].setAttribute('rel','noopener'); as[i].setAttribute('title','点击查看高清大图'); } } function enhance(){markDoc();wrapTables();markNotes();enhanceSpec();sizeCode();bigImage();} function bind(){ enhance(); var st=document.getElementById('sml-g-main'); if(!st) return; var cap=document.getElementById('sml-g-cap'); var cnt=document.getElementById('sml-g-count'); var zoom=document.getElementById('sml-g-zoom'); var bs=document.querySelectorAll('button.sml-g-thumb'); for(var i=0;i<bs.length;i++){ bs[i].addEventListener('click',function(){ for(var j=0;j<bs.length;j++){bs[j].className='sml-g-thumb';} this.className='sml-g-thumb on'; var self=this; st.style.opacity='0.35'; window.setTimeout(function(){ st.src=self.getAttribute('data-view'); st.alt=self.getAttribute('data-cap'); st.style.opacity='1'; },90); cap.textContent=self.getAttribute('data-cap'); var tot=bs.length; cnt.textContent=self.getAttribute('data-idx')+' / '+(tot<10?'0'+tot:tot); zoom.href=self.getAttribute('data-full'); }); } } if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',bind);}else{bind();} window.addEventListener('load',enhance); })(); </script></html> ===== 1 资源特性 ===== ==== 1.1 产品简介 ==== sTPC-EXXX-3568B 系列(量产型号 sTPC-E101-3568B / E121-3568B / E150-3568B / E156-3568B / E170-3568B / E215-3568B)是基于瑞芯微 **RK3568** 平台的**无风扇 ARM 触控一体机(PANEL PC)**,屏幕尺寸覆盖 10.1″ / 12.1″ / 15″ / 15.6″ / 17″ / 21.5″ 六种规格。 整机采用铝镁合金前框 + 全封闭后箱,正面为多点电容式触摸屏,背部下方集中布置电源、串口、USB、HDMI、网口等对外接口,天线与 SIM 卡位于背部上方。支持 VESA 支架与嵌入式(开孔)两种安装方式,适用于产线看板、设备 HMI、自助查询终端等工业现场。 **产品特点** * 支持 Rockchip RK3568:4 × Cortex-A55 @2.0GHz,1TOPS NPU * 全板载 I/O 设计,接口集中在背部下方,维护无需拆机 * 无风扇全封闭结构,支持 VESA / 嵌入式安装 * Android 11 与 Ubuntu 20.04 双系统可选 **型号命名规则** ^ 字段 ^ 含义 ^ | sTPC | 触控一体机系列(SmartLinc Touch Panel Computer) | | E101 / E121 / E150 / E156 / E170 / E215 | 屏幕尺寸:10.1″ / 12.1″ / 15″ / 15.6″ / 17″ / 21.5″ | | 3568B | 主控平台:Rockchip RK3568,B 版整机 | ==== 1.2 整机规格 ==== ^ 项目 ^ 规格 ^ | **处理器** | Rockchip RK3568,4 核 4 × Cortex-A55,最高主频 2.0GHz | | **GPU** | Mali-G52 | | **NPU** | 1 TOPS(INT8) | | **内存** | 2GB / 4GB(板载) | | **存储** | 板载 32GB eMMC | | **存储扩展** | 1 × Micro SD(TF)卡槽 | | **显示输出** | 1 × HDMI,最高支持 3840 × 2160 | | **以太网** | 1 × 10/100/1000Mbps 速率自侦测 | | **无线** | 板载 2.4G/5G 双频 Wi-Fi,802.11 a/b/g/n/ac + Bluetooth 5.0 | | **4G** | LTE 4G 模组 EG800AK-C(系统自动拨号),见 4.4 | | **USB** | 2 × USB3.0(其中 1 路与 OTG 复用)+ 2 × USB2.0 | | **串口** | 4 × 串口:2 × RS485 + 2 × RS232(3.5mm 间距 3P 可插拔端子),ttyS1 ~ ttyS4 | | **音频** | 1 × SPK(8Ω 6W,PH2.0-4P),1 × Ø3.5 Mic in | | **SIM** | 2 × Micro SIM 插槽(二选一使用) | | **指示灯** | 1 × 电源指示灯(绿色),1 × 系统指示灯(蓝色) | | **按键** | 1 × Recover 刷机键(针孔),1 × Return 返回键(短按返回 / 上电时长按 3s 进入烧录) | | **GPIO** | 16 针(PH2.0-16P)端子,奇数脚 GPO / 偶数脚 GPI,选配引出,见 2.3 | | **触摸屏** | 多点电容式,透光率 ≥ 87%,USB 控制器 | | **操作系统** | Android 11 / Ubuntu 20.04(标准);Debian 11 按项目提供 | | **视频编解码** | H.264 / H.265 硬件编解码(VPU),见 5.13 | | **电源输入** | DC 12V(±0.3V),5.5×2.1mm 圆头,带过流、过压保护;E150(15″)支持 DC 12~24V 宽压 | | **整机功耗** | ≤ 20W | | **结构** | 铝镁合金外壳,无风扇,支持 VESA / 嵌入式安装 | | **工作温度** | -20 ~ 70℃(10.1″ / 12.1″ / 15″);0 ~ 50℃(15.6″ / 17″ / 21.5″) | | **存储温度** | -20 ~ 70℃(10.1″ / 12.1″ / 15″);-20 ~ 60℃(15.6″ / 17″ / 21.5″) | | **相对湿度** | 5 ~ 95% @40℃(无凝露) | | **振动** | 1.5Grms,IEC 60068-2-64,随机 5~500Hz,1hr/轴 | | **冲击** | 10G,IEC 60068-2-27,半正弦波,持续 11ms | | **EMC** | CE / FCC Class A | **提示:**产品规格如有更改,恕不另行通知。本节数据对应规格书 v1.3(更新日期 2026-06-24)。 ==== 1.3 型号与配置 ==== ^ 型号 ^ 尺寸 ^ 分辨率 ^ 亮度 ^ 背光 MTBF ^ 工作温度 ^ 内存 2GB 料号 ^ 内存 4GB 料号 ^ | sTPC-E101-3568B | 10.1″ | 1280 × 800 | 350cd/m² | 30000hrs | -20 ~ 70℃ | B11.AE101.38.0024 | B11.AE101.38.0025 | | sTPC-E121-3568B | 12.1″ | 1024 × 768 | 500cd/m² | 50000hrs | -20 ~ 70℃ | B11.AE121.38.0004 | B11.AE121.38.0005 | | sTPC-E150-3568B | 15″ | 1024 × 768 | 350cd/m² | 50000hrs | -20 ~ 70℃ | B11.AE150.38.0018 | B11.AE150.38.0019 | | sTPC-E156-3568B | 15.6″ | 1920 × 1080 | 250cd/m² | 15000hrs | 0 ~ 50℃ | B11.AE156.38.0012 | B11.AE156.38.0013 | | sTPC-E170-3568B | 17″ | 1280 × 1024 | 250cd/m² | 30000hrs | 0 ~ 50℃ | B11.AE170.38.0010 | B11.AE170.38.0011 | | sTPC-E215-3568B | 21.5″ | 1920 × 1080 | 250cd/m² | 30000hrs | 0 ~ 50℃ | B11.AE215.38.0006 | B11.AE215.38.0007 | **提示:**各型号均为电容触摸屏 + 32GB 板载 eMMC,内存分 2GB / 4GB 两种配置,实配料号见上表;15″ 机型(E150)的电源宽压与接口组数差异见 1.2、2.3。 ==== 1.4 可选配件 ==== ^ 选项 ^ 描述 ^ | 电源适配器 | 12V 3A 电源适配器,带国标电源线 | | 4G 套件 | EG800AK-C 模组 + 4G 外置天线(SMA) | | Wi-Fi 天线 | 胶棒天线、吸盘 3M 天线 | ===== 2 接口布局和尺寸 ===== ==== 2.1 整机外观 ==== 整机为正屏 + 背出线结构:正面只有触摸屏与铝合金前框;背部上方为天线、SIM 卡座与喇叭接口区,下方为对外接口区(电源、串口、USB、HDMI、网口),四角为 VESA 安装孔。 ^ 整机正面 ^ 立体视角 ^ | {{wiki:stpc_e156_front_view.jpg?400}} \\ 正面:多点电容触摸屏 + 铝镁合金前框 | {{wiki:stpc_e156_3568b_perspective.jpg?400}} \\ 立体:整机结构与背部扩展舱 | ^ 整机背面 ^ 接口区(正视) ^ | {{wiki:stpc_e156_3568b_back.jpg?400}} \\ 背面:VESA 孔位 + 接口区 | {{wiki:stpc_e156_3568b_io_lower.jpg?400}} \\ 接口区:DC 12V / 串口 / HDMI / 网口 / USB 一字排开 | ==== 2.2 接口概览 ==== 整机对外接口在**背部下方**从左到右依次为:DC 12V → PWR / SYS 指示灯 → Recover → Return → MIC → RS485 → RS232 → HDMI → LAN → USB3.0 → USB2.0;背部上方自左向右为 SIM 卡座 → 4G 天线 → Wi-Fi / BT 天线 → SPK 喇叭座 → GPIO 引出座。图中标注与下表序号一一对应,点击图片可查看高清大图。 ^ 接口布局(正视) ^ 接口布局(斜视) ^ | {{wiki:stpc_e156_io_a.png?400}} \\ 正视:对外接口在背部下方一字排开 | {{wiki:stpc_e156_io_b.png?400}} \\ 斜视:RS485 / SIM / 扬声器 / 天线座位置 | ^ 序号 ^ 丝印 ^ 接口 ^ 数量 ^ 说明 ^ | 1 | DC 12V | 电源输入 | 1 | 5.5×2.1mm 圆头,内正外负 | | 2 | PWR | 电源指示灯 | 1 | 绿色,通电常亮 | | 3 | SYS | 系统指示灯 | 1 | 蓝色,系统运行时常亮 | | 4 | Recover | 刷机键 | 1 | 针孔式,断电按住上电进入 Loader / Maskrom | | 5 | Return | 返回键 | 1 | 轻触按键,Android 下等效 BACK | | 6 | MIC | 麦克风输入 | 1 | Ø3.5 phone jack | | 7 | RS485 | RS485 串口 | 2 | 3.5mm 3P 端子,A1 / B1 / G1,ttyS1 | | 8 | RS232 | RS232 串口 | 2 | 3.5mm 3P 端子,R2 / T2 / G2,ttyS2 | | 9 | HDMI | HDMI 输出 | 1 | 标准 A 型,最高 3840×2160 | | 10 | LAN | 以太网 | 1 | RJ45,10/100/1000M 自适应 | | 11 | USB3.0 | USB3.0 | 2 | 蓝色双层,下口为 OTG 复用(烧录 / ADB) | | 12 | USB2.0 | USB2.0 | 2 | 黑色双层 | | 13 | SIM | Micro SIM | 2 | 二选一使用 | | 14 | 4G | 4G 天线 | 1 | SMA 接口 | | 15 | Wi-Fi/BT | Wi-Fi 天线 | 1 | SMA 接口 | | 16 | SPK | 扬声器 | 1 | PH2.0-4P,8Ω 6W | | 17 | GPIO | GPIO 扩展 | 1 | 选配引出 | | 18 | GND | 接地柱 | 1 | M4 接地螺钉 | **提示:**表中数量为系列最大配置;实配组数随机型与配置而变(图中 10.1″ 样机为 RS485、RS232 各 1 组)。接线与设备节点以机器丝印为准,节点对应关系见 4.5。 ==== 2.3 接口引脚定义 ==== 整机对外均为成品连接器,无裸板插针。串口与喇叭使用 3.5mm / 2.0mm 间距可插拔端子,接线时按丝印对位,建议线径 0.2 ~ 1.5mm²,剥线长度 6 ~ 7mm。 **DC 12V(5.5×2.1mm 圆头)** ^ 项目 ^ 定义 ^ | 内芯 | +12V | | 外环 | GND | | 输入范围 | DC 12V ±0.3V(15″ 机型 12 ~ 24V) | | 保护 | 过压保护、过流保护 | **RS485(3.5mm 3P 端子,2 组:ttyS1 / ttyS3)** ^ 脚位 ^ RS485-1(ttyS1)^ RS485-2(ttyS3)^ 说明 ^ | 1 | A1 | A3 | 差分正(485_A) | | 2 | B1 | B3 | 差分负(485_B) | | 3 | G1 | G3 | 信号地 | 半双工,收发方向由硬件自动切换,无需软件控制 RTS。 **RS232(3.5mm 3P 端子,2 组:ttyS2 / ttyS4)** ^ 脚位 ^ RS232-1(ttyS2)^ RS232-2(ttyS4)^ 说明 ^ | 1 | R2 | R4 | 接收 RXD,接对端 TXD | | 2 | T2 | T4 | 发送 TXD,接对端 RXD | | 3 | G2 | G4 | 信号地 | 全双工,与外部设备连接时 **R/T 交叉、GND 共地**。 **提示:**丝印后缀与设备节点编号一致(A1 → ttyS1、R2 → ttyS2、A3 → ttyS3、R4 → ttyS4),因此 RS485 占 ttyS1 / ttyS3、RS232 占 ttyS2 / ttyS4,序号不连续属正常。 **SPK(PH2.0-4P)** ^ 脚位 ^ 丝印 ^ 信号 ^ 说明 ^ | 1 | L+ | 左声道 + | 8Ω 6W | | 2 | L- | 左声道 - | — | | 3 | R- | 右声道 - | — | | 4 | R+ | 右声道 + | 8Ω 6W | **MIC(Ø3.5 phone jack)** ^ 部位 ^ 信号 ^ 说明 ^ | TIP | MIC+ | 麦克风信号 | | SLEEVE | GND | 地 | **USB** ^ 接口 ^ 模式 ^ 说明 ^ | USB3.0(上排) | Host | 5Gbps,接 U 盘 / 键鼠 / 工业相机 | | USB3.0/OTG(下排) | Host / Device | Device 模式下用于系统烧录与 ADB 调试 | | USB2.0(双层) | Host | 480Mbps,接 U 盘 / 键鼠 / 打印机 | **HDMI / LAN / SIM** ^ 接口 ^ 规格 ^ | HDMI | 标准 A 型 19pin,最高 3840×2160 | | LAN | RJ45 8P8C,10/100/1000M 自适应,支持 Auto-MDIX,带 Link/Act 指示灯 | | SIM | 2 × Micro SIM,二选一使用,插入方向以卡座丝印为准 | **GPIO(PH2.0-16P 端子,选配引出)** 整机 GPIO 为选配引出(背部 GPIO 座 / 内部插针),接线按机器丝印对位。 ^ 脚位 ^ 方向 ^ 说明 ^ | 奇数脚 1 / 3 / 5 / 7 / 9 / 11 / 13 / 15 | GPO | 通用输出,硬件固定,只作输出 | | 偶数脚 2 / 4 / 6 / 8 / 10 / 12 / 14 / 16 | GPI | 通用输入,硬件固定,只作输入 | GPO / GPI 由硬件固定,不能通过软件互换;下表为系统侧 GPIO 编号,与端子脚位序号是两个概念。 **系统 GPIO 编号** ^ 用途 ^ 系统 GPIO 编号 ^ | GPO(数字输出) | 95、94、21、22、140、141 | | GPO / GPI(可输出 / 输入) | 13、14、96、93、108、107 | GPIO 编号为内核 gpiochip 全局编号,不同固件版本可能整体偏移;未导出的引脚需先导出再操作。 ==== 2.4 机械尺寸 ==== ^ 型号 ^ 整机尺寸 W×H×D(mm) ^ 开孔尺寸(mm) ^ 净重 ^ | sTPC-E101-3568B | 269 × 188 × 39 | 261 × 180 | 1kg | | sTPC-E121-3568B | 315 × 250 × 44 | 307 × 242 | 2kg | | sTPC-E150-3568B | 368 × 292 × 46 | 358 × 282 | 2.5kg | | sTPC-E156-3568B | 400 × 257 × 39 | 392 × 249 | 3kg | | sTPC-E170-3568B | 408 × 341 × 46 | 398 × 331 | 4kg | | sTPC-E215-3568B | 549 × 341 × 46 | 539 × 330 | 5kg | {{wiki:pc_dim_101_big.png?760}} 10.1″ 机型尺寸图(单位 mm):整机 269 × 188 × 39,开孔 261±2 × 180±2,安装孔 4 × Ø10,VESA 孔 4 × M4 深 6mm。其余尺寸机型的尺寸图见规格书第 2~3 页。 **结构说明** * 外壳材质:铝镁合金前框 + 金属后箱,无风扇全封闭 * 安装方式:VESA 支架(4 × M4,深度 6mm)或嵌入式开孔安装(卡扣固定) * 散热:整机自然散热,背部需预留 ≥ 50mm 通风空间 ===== 3 快速入门 ===== ==== 3.1 系统下载 ==== **Android系统** * Android 11 固件(含 root 权限):联系销售 / 技术支持获取下载地址 **Linux系统** * Ubuntu 20.04 固件(含 Qt 5.12.8、GStreamer):联系销售 / 技术支持获取下载地址 * Debian 11 固件:按项目需求单独提供 ==== 3.2 烧录工具下载 ==== 两个工具均为瑞芯微官方发布版本,已作为本站附件上传,下载链接见各条目末尾: * **USB 驱动**:解压后双击 DriverInstall.exe 完成安装 —— {{wiki:driverassitant_v5.11.zip|DriverAssitant_v5.11 驱动安装包(9.4 MB)}} * **烧录工具**:解压后双击 RKDevTool.exe 启动 —— {{wiki:rkdevtool_release_v3.32.zip|RKDevTool_Release_v3.32 烧录工具(5.5 MB)}} **提示:**驱动未安装成功时,设备管理器会出现未知设备,需重新安装驱动后再烧录。 ==== 3.3 系统烧录 ==== Linux 与 Android 共用同一套瑞芯微工具烧录,整机无需拆机:**USB3.0/OTG 口** 接线、**Recover 针孔** 进入烧录模式。 **① 连接 OTG 口** 取一根 USB3.0 公对公双头线,一端接整机接口区下排的蓝色 **USB3.0/OTG** 口,另一端接电脑 USB 口: {{wiki:burn_otg_v2.png?560}} **② 安装瑞芯微 USB 驱动** 进入驱动包目录,双击 DriverInstall.exe: {{wiki:flash2.png?560}} 弹出「瑞芯微驱动助手」后点「驱动安装」,等待进度条走完: {{wiki:flash3.png?560}} **提示:**驱动异常或换电脑后无法识别设备时,先在驱动助手中点「驱动卸载」,再重新点「驱动安装」。 **③ 打开烧录工具** 解压工具包,双击 RKDevTool.exe: {{wiki:flash4.png?560}} **④ 让整机进入 Loader 模式** 整机先断电,用针状物按住背部 **Recover** 孔不松手,再接入 DC 12V 上电,约 2 秒后松开: {{wiki:burn_recover_v2.png?560}} **⑤ 确认设备已识别** RKDevTool 底部出现 **发现一个 LOADER 设备** 即识别成功: {{wiki:flash6.png?560}} 若一直显示「没有发现设备」,回到第 ④ 步重新进入,或更换 USB 口与数据线。 **⑥ 选择固件并升级** 切到「升级固件」页,先点「固件」选择 update.img,再点「升级」: {{wiki:flash7.png?560}} 烧录进度到 100% 后设备自动重启,首次开机约 30 ~ 60 秒。 **提示:** - 由 Android 切换至 Linux(或反向)时若无法识别设备,可在「高级功能」中执行「进入 Maskrom」后重新烧录 - 烧录过程中禁止断电、拔线,否则可能无法开机,需重新进入 Loader 重烧 - 高级用户可在 Linux 下用 upgrade_tool 命令行烧录:sudo upgrade_tool uf update.img ==== 3.4 U盘升级 ==== Android 整机可用 U 盘离线升级,全程不需要连接电脑。本节**只适用于 Android 固件**;Linux 下的对应流程见 5.10,在线升级见 4.13。 === 3.4.1 准备 update.img === 固件来源二选一: - 向我司获取现成的 update.img(获取方式见 3.1) - 自行用 SDK 打包:在 SDK 根目录执行整包编译,生成 rockdev/Image-xxx/ 目录,再执行 ./mkupdate.sh(或 make otapackage) <code bash> # 打包整包镜像 ./build.sh updateimg ls -lh rockdev/update.img </code> U 盘要求:FAT32 格式,可用容量 ≥ 4GB(建议 ≤ 32GB),update.img 放在根目录且文件名不变。 === 3.4.2 U盘本地升级 === - 把 update.img 拷到 U 盘根目录 - 把 U 盘插入整机的 USB 口(USB3.0 / USB2.0 任意一口均可) - 系统识别到升级包后按弹窗提示确认,升级过程中保持供电,完成后整机自动重启 **提示:**插入 U 盘后无升级提示时,先确认文件名与 U 盘格式,再重启整机重试;Android 联网升级见 4.13。 ===== 4 Android系统的使用 ===== 本章**只针对 Android 系统**(Android 11)。Linux(Ubuntu / Debian)下的同名功能集中在第 5 章,两章界面、工具、命令均不混用;Android 应用层的接口调用统一见 4.12。 ==== 4.1 开启ADB调试 ==== === 4.1.1 USB ADB使用方法 ==== - 使用 USB 数据线连接整机 **USB3.0/OTG 口**(下排蓝色口)与电脑 - 「设置 → 关于平板电脑」,连续点击「版本号」7 次开启开发者选项 - 进入「开发者选项」,打开「USB 调试」 - 电脑端执行 adb devices,首次连接需在整机弹窗点击「允许」 <code bash> adb devices # List of devices attached # 0123456789ABCDEF device </code> === 4.1.2 网络ADB使用方法 ==== 整机与电脑同网段时,可无线调试,无需数据线。 <code bash> adb connect 192.168.8.55:5555 adb devices </code> ==== 4.2 WiFi使用方法 ==== - 「设置 → 网络和互联网 → WLAN」,打开开关 - 选择目标热点并输入密码(板载 2.4G/5G 双频,802.11 a/b/g/n/ac) - 连接成功后可在「网络详情」中查看 IP 地址 - 信号弱时可调整背部 **Wi-Fi/BT** SMA 天线角度,或改用吸盘天线 <code bash> adb shell dumpsys wifi | grep -i "curState" adb shell ifconfig wlan0 </code> ==== 4.3 以太网使用方法 ==== 整机为单网口(LAN,千兆自适应),Android 下设备名为 **eth0**。以下命令均在 adb shell 中执行,修改配置需 su 权限。 **查看设备** <code bash> ip link show </code> **使用(动态 IP)** <code bash> su ifconfig eth0 up ifconfig eth0 dhcp # 部分固件需改用 dhcpcd eth0 </code> **使用(静态 IP)** <code bash> su ifconfig eth0 down ifconfig eth0 192.168.8.55 netmask 255.255.255.0 ifconfig eth0 up </code> **测试** <code bash> ping -c 4 192.168.8.1 </code> **提示:**静态 IP 需开机自动生效时,在系统内配置 eth0 静态地址,或应用层通过 ConnectivityManager 设置以太网静态 IP。 ==== 4.4 4G模块使用方法 ==== 整机 4G 采用 Quectel EG800AK-C 模组(插装于 6A12-J 载板),系统上电后自动拨号,无需手工配置。 === 4.4.1 支持列表 ==== 整机仅支持下表所列 4G 模组,USB ID 用于在板端 lsusb 输出中确认模组是否已被识别: ^ 模组型号 ^ 制式 ^ USB ID ^ | Quectel EG800AK-C | LTE 4G | 2c7c:6002 | === 4.4.2 步骤 ==== **4G 模组** - 接上 4G 天线,SIM 卡缺口朝外插入卡座(芯片面朝板) - 上电后在「设置 → 网络和互联网 → 移动网络」中确认已识别 SIM 卡 - 打开移动数据,状态栏出现 4G 图标即可上网 <code bash> adb shell lsusb # Bus 002 Device 002: ID 2c7c:6002 Quectel Wireless Solutions Co., Ltd. EG800AK-C </code> **查看信号与网络注册(AT 命令)** 模组 AT 口一般为 /dev/ttyUSB2,需 root 权限: <code bash> echo -e "AT+CPIN?\r\n" > /dev/ttyUSB2 # SIM 卡是否插好 echo -e "AT+CSQ\r\n" > /dev/ttyUSB2 # 信号强度,0~99 为正常 echo -e "AT+COPS?\r\n" > /dev/ttyUSB2 # 是否注册到运营商网络 echo -e "AT+CGREG?\r\n" > /dev/ttyUSB2 # 数据网络是否就绪 </code> **提示:**SIM 卡需在**断电状态**下插拔,热插拔可能导致模组不识别,需重新上电。 ==== 4.5 串口使用方法 ==== 整机提供 2 路 RS485 与 2 路 RS232,Android 下节点与端子定义如下(最终以背部丝印为准): ^ 接口 ^ 设备节点 ^ 引脚定义 ^ | RS485-1 | /dev/ttyS1 | A1 / B1 / G1 | | RS485-2 | /dev/ttyS3 | A3 / B3 / G3 | | RS232-1 | /dev/ttyS2 | R2 / T2 / G2 | | RS232-2 | /dev/ttyS4 | R4 / T4 / G4 | === 4.5.1 测试工具 ComAssistant ==== Android 下串口测试统一使用 **ComAssistant**(串口助手 App): - 安装并打开 ComAssistant,首次运行授予存储与串口设备权限 - 在设备列表中选择目标节点:RS485 选 /dev/ttyS1 或 /dev/ttyS3,RS232 选 /dev/ttyS2 或 /dev/ttyS4 - 设置参数 115200、8 位数据、1 位停止、无校验(8N1) - 点击「打开串口」,在发送区输入内容后点「发送」;回环或对发时可同时观察接收区 **提示:**ComAssistant 需要 Root 权限访问 /dev/ttyS*;打开失败时先在 adb shell 中执行 su 与 ls -l /dev/ttyS* 确认节点权限。 === 4.5.2 测试方式 ==== - RS232 回环:跳帽短接同一 232 节点的 R 与 T - RS232 — RS232 对发:交叉接线(R↔T,GND 共地) - RS232 — RS485 对发:经 232 转 485 模块 - RS232 — RS232 转 USB — PC 端串口助手 - RS485 — RS485 转 USB — PC 端串口助手 - RS485 回环:短接 A 与 B **注意事项** - 整机为 3.5mm 3P 可插拔端子(无 DB9),配压接端子或转接线使用;不同厂商的转接线线序可能不同,A / B 或 R / T 反接会直接导致通信失败 - RS485 为半双工,方向由硬件自动切换,收发切换时注意帧间隔 === 4.5.3 应用层调用 ==== 应用内不要直接用 shell 打开节点,使用 NodkaAPI 的 uart_ 接口(见 4.12.5): <code java> NodkaAPI api = NodkaAPI.nodkaAPICreate(context); api.uart_open("/dev/ttyS2", 115200); api.uart_send("/dev/ttyS2", "hello".getBytes()); api.uart_receive("/dev/ttyS2", new UartReceiveDataCallback() { @Override public void onReceiveData(byte[] data) { // 处理收到的数据 } }); api.uart_close("/dev/ttyS2"); </code> ==== 4.6 USB与SD卡 ==== 整机提供 2 × USB3.0(下排为 OTG 复用)与 2 × USB2.0,另支持 SD 卡。 **U 盘** - 插入 U 盘,文件管理器左侧出现「USB 存储设备」 - 进入后能浏览 U 盘内容即识别正常 - 拔出前先在「设置 → 存储」中卸载,避免数据损坏 <code bash> adb shell ls /storage # 可见 udisk0 或 91A3-2B1C 形式的挂载点 adb shell lsusb </code> **SD 卡** <code bash> adb shell ls /storage # 可见 xxxx-xxxx 形式的 SD 卡挂载点 adb shell dumpsys mount | grep -i mmc </code> **提示:**OTG 口在 Device 模式(烧录 / ADB)下不能同时作为 Host 使用;插 U 盘前请确认系统已退出烧录模式。Linux 下的手工挂载方法见 5.5。 ==== 4.7 音频测试 ==== 整机音频由 **SPK(PH2.0-4P,8Ω 6W)** 输出、**MIC(Ø3.5)** 输入,无内置喇叭时需外接。 **喇叭输出测试** - 8Ω 喇叭接 SPK 端子(L+ / L- / R+ / R-) - 打开系统自带「音乐」播放器播放测试音频,按音量键确认音量可调、左右声道正常 - 测试文件位于 /nodka_test/LR_audio.wav,可用「文件」App 直接播放 **麦克风录音测试** - 插入 Ø3.5 麦克风或使用板载 MIC - 打开系统自带「录音机」App,录制约 5 秒后回放,确认清晰无杂音 **查看音频通路** <code bash> adb shell dumpsys media.audio_flinger | grep -i "Output thread" adb shell getprop | grep -i audio </code> **提示:**无声音时先确认 SPK 端子 L+ / L- / R+ / R- 与喇叭线序一致,再用 adb shell tinymix 检查功放通路是否打开。Linux 下用 aplay / arecord,见 5.1。 ==== 4.8 HDMI与双屏显示 ==== 整机支持内部屏 + HDMI 同时输出,HDMI 最高 3840 × 2160。 **设置 HDMI 输出** - 接入 HDMI 显示器,进入「设置 → 显示 → HDMI」 - 选择分辨率与刷新率(推荐 1920 × 1080 @ 60Hz),确认画面稳定无闪烁 - 选择显示模式:同显(镜像)或异显(扩展) ^ 模式 ^ 说明 ^ | 同显(镜像) | 内部屏与 HDMI 显示相同画面,分辨率取二者较小值 | | 异显(扩展) | 两屏独立画面,应用侧需指定 DisplayId | **命令行查看** <code bash> adb shell wm size adb shell wm density adb shell dumpsys display | grep -i "mDisplayId" </code> **提示:**应用内可用 display_setScreenRotation / display_setScreenBrightness 等接口控制显示(见 4.12.3)。Linux 下用 xrandr 或 weston.ini,见 5.6。 ==== 4.9 按键与指示灯测试 ==== ^ 项目 ^ 位置 ^ 现象 / 操作 ^ 判定 ^ | PWR 指示灯 | 接口区左侧 | 接入 DC 12V 后绿色常亮 | 灯亮即电源正常 | | SYS 指示灯 | PWR 右侧 | 系统启动完成后蓝色常亮 | 灯亮即系统运行 | | Recover | 指示灯右侧针孔 | 断电按住 + 上电 2 秒后松开 | RKDevTool 识别到 LOADER 设备 | | Return | Recover 右侧 | 按下返回上一级;长按上电 3s 进入烧录模式 | 界面返回 / 进入 Loader | **Return 按键测试(getevent)** <code bash> adb shell getevent -l # /dev/input/event2: EV_KEY KEY_BACK DOWN # /dev/input/event2: EV_SYN SYN_REPORT 00000000 # /dev/input/event2: EV_KEY KEY_BACK UP </code> 按下 Return 出现 DOWN,松开出现 UP,即按键与驱动正常。 **Return 按键:进入烧录模式** 长按 Return 按键不放,上电 3 秒后松开即可进入烧录模式,无需使用 Recover 针孔。 **Recover 快速自检** 断电按住 Recover 针孔再上电,RKDevTool 中出现 LOADER 设备即正常(烧录步骤见 3.3)。 **提示:**Recover 为针孔结构,请使用直径 ≤ 1.5mm 的针状物,避免损伤内部轻触开关。 ==== 4.10 触摸屏测试 ==== 整机为多点电容触摸屏,控制器经 USB 接入系统。 **查看触摸设备** <code bash> adb shell getevent -pl /dev/input/event* adb shell dumpsys input | grep -i -A2 "touch" </code> **划线与多点检测** - 「设置 → 开发者选项 → 指针位置」,手指滑动可看到 X / Y 坐标与轨迹 - 用五指同时按住屏幕,观察是否同时上报多个触点(多点触控) - 四角与中心各点按一次,确认无偏移、无死区(触摸校准数据出厂已写入,一般无需重新校准) **提示:**若触摸无响应,先确认触摸 USB 线与主板连接,再用 adb shell lsusb 检查是否存在触摸控制器设备。 ==== 4.11 GPIO使用方法 ==== 整机 GPIO 为**选配引出**(背部 GPIO 座 / 内部插针)。16 针端子的奇偶脚方向规则、系统 GPIO 编号与端子对应关系见 **2.3**,本节不再重复。 Android 应用通过 NodkaAPI 的 gpio_ 接口操作,无需 shell(见 4.12.4): <code java> NodkaAPI api = NodkaAPI.nodkaAPICreate(context); api.gpio_export(95); // 导出引脚 api.gpio_direction(95, "out"); // 设为输出 api.gpio_write(95, 1); // 输出高电平 int v = api.gpio_read(95); // 回读电平 api.gpio_unExport(95); // 取消导出 </code> **提示:**GPIO 编号为内核 gpiochip 全局编号,不同固件版本可能整体偏移;未导出的引脚需先 gpio_export 再操作。Linux 命令行(/sys/class/gpio)操作见 5.4。 ==== 4.12 API参考与使用 ==== 面向 Android 应用开发,把硬件与系统能力封装为 Java 接口,应用不必直接读写 /dev 与 /sys 节点。Linux 侧不提供本套接口,请使用第 5 章的命令行方式。 **接口源码包下载** {{wiki:androidapi1.5.zip|AndroidAPI 1.5 接口源码包(18.7 MB)}} 包内包含 AndroidAPI.jar、libandroid-jni.so、AndroidAPI-sources.jar、Javadoc 文档、AndroidAPIDemo 示例工程与 APK、platform.jks 签名文件及 readme.txt。串口、GPIO、系统控制类接口需要系统签名或 Root 权限。 === 4.12.1 使用说明 === **接口分类** ^ 前缀 ^ 类别 ^ 说明 ^ | devinfo_ | 硬件及系统信息查询类 | 系统版本、CPU、内存、存储、SN 等 | | display_ | 显示控制类 | 亮度、旋转、分辨率、导航栏与状态栏 | | gpio_ | GPIO 控制类 | 导出、方向、读写电平 | | uart_ | 串口控制类 | 打开、收发、关闭串口 | | sysctrl_ | 系统控制类 | 定时开关机、立即重启、静默安装 | **1. 在 Application 的 onCreate 中创建实例** <code java> public class APIApplication extends Application { private NodkaAPI mNodkaAPI; @Override public void onCreate() { super.onCreate(); mNodkaAPI = NodkaAPI.nodkaAPICreate(this); } public NodkaAPI getNodkaAPI() { return mNodkaAPI; } } </code> **2. 在 Activity 或 Fragment 中取用** <code java> private NodkaAPI mNodkaAPI = APIApplication.getApplication().getNodkaAPI(); </code> **提示:**需在 AndroidManifest.xml 中把 android:name 指向 APIApplication;串口、GPIO、系统控制类接口需要系统签名或 Root 权限。 === 4.12.2 硬件及系统信息查询 === ^ 方法名 ^ 方法说明 ^ | devinfo_getAndroidVersion() | 获取 Android 系统版本信息 | | devinfo_getAvailMem() | 获取可用内存容量 | | devinfo_getBuildNumber() | 获取系统版本号信息 | | devinfo_getCpuCores() | 获取 CPU 核心数 | | devinfo_getCPUCurFreqKHz() | 获取 CPU 当前运行主频 | | devinfo_getCPUMaxFreqKHz() | 获取 CPU 最大主频 | | devinfo_getCPUMinFreqKHz() | 获取 CPU 最小主频 | | devinfo_getCPUTemp() | 获取 CPU 温度 | | devinfo_getDeviceModel() | 获取设备型号信息 | | devinfo_getKernelVersion() | 获取内核版本信息 | | devinfo_getSerialNum() | 获取设备 SN 号 | | devinfo_getStorageAvailableSize() | 获取本机可用存储容量 | | devinfo_getStorageTotalSize() | 获取本机存储容量(不包括系统分区) | | devinfo_getTotalMem() | 获取内存总容量 | === 4.12.3 显示控制(display_) === ^ 方法名 ^ 方法说明 ^ | display_getNavBar() | 获取是否显示导航栏与状态栏 | | display_getScreenBrightness() | 获取屏幕亮度 | | display_getScreenRotation() | 获取屏幕旋转方向 | | display_getWindowHeight() | 获取屏幕分辨率高度 | | display_getWindowWidth() | 获取屏幕分辨率宽度 | | display_setNavBar(Boolean enable) | 设置是否显示导航栏与状态栏 | | display_setNavBarSlideShow(Boolean enable) | 设置滑动时是否显示导航栏与状态栏 | | display_setScreenBrightness(int screenBrightness) | 设置屏幕亮度 | | display_setScreenRotation(int rotation) | 设置屏幕旋转方向 | === 4.12.4 GPIO控制(gpio_) === ^ 方法名 ^ 方法说明 ^ | gpio_direction(int gpioNumber, String direction) | 设置指定 GPIO 的方向(输入 / 输出) | | gpio_export(int gpioNumber) | 导出指定 GPIO 引脚 | | gpio_read(int gpioNumber) | 读取指定 GPIO 的电平值 | | gpio_unExport(int gpioNumber) | 取消导出指定 GPIO 引脚 | | gpio_write(int gpioNumber, int value) | 设置指定 GPIO 的输出电平 | 引脚编号见 4.11。 === 4.12.5 串口控制(uart_) === ^ 方法名 ^ 方法说明 ^ | uart_close(String uartNode) | 关闭 uart 设备,如 /dev/ttyS2 | | uart_getAvailableDevices() | 获取 uart 可用设备节点,返回 List<String> | | uart_IsOpen(String uartNode) | 判断 uart 设备是否已经打开 | | uart_open(String uartNode, int baudrate) | 打开 uart 设备并设置波特率 | | uart_receive(String uartNode, UartReceiveDataCallback callback) | 接收串口数据,数据回调返回 | | uart_send(String uartNode, byte[] buffer) | 发送串口数据 | | uart_stopReceive(String uartNode) | 停止接收数据,调用后不再有回调 | 节点与测试方法见 4.5。 === 4.12.6 系统控制(sysctrl_) === ^ 方法名 ^ 方法说明 ^ | sysctrl_cancelReboot() | 取消重启设备 | | sysctrl_cancelShutdown() | 取消自动关机 | | sysctrl_powerOn(String time, boolean repeat) | 设置设备开机时间 | | sysctrl_reboot(String time, boolean repeat) | 设置设备重启时间 | | sysctrl_rebootNow() | 立即重启设备 | | sysctrl_shutdown(String time, boolean repeat) | 设置设备关机时间 | | sysctrl_shutdownNow() | 立即关机 | | sysctrl_installApk(String apkPath) | 静默安装应用 | ==== 4.13 OTA在线升级(Android) ==== Android 下的在线升级由预置应用 **update** 完成,整机需先连通外网。 - 打开应用列表,找到「update」 - 点击「UPDATE NOW」,按提示下载并安装 - 升级过程中保持供电与网络,完成后整机自动重启 应用列表中的 update 图标: {{wiki:ota_app_drawer.jpg?560}} 思迈联科在线升级界面: {{wiki:ota_updater.png?560}} **提示:**本节为 Android 联网在线升级;Android 的 U 盘离线升级见 3.4,Linux 在线升级见 5.10。 ===== 5 Linux系统的使用 ===== 本章**只针对 Linux 系统**(Ubuntu 20.04 / Debian 11,部分项目为 Buildroot)。Android 下的对应功能见第 4 章。 除 **5.11 交叉编译**与 **5.12.1 Docker 编译**在**开发主机**上执行外,本章命令均在板端终端或 SSH 中执行。按键、指示灯与触摸屏的判定标准与第 4 章一致(见 4.9、4.10),本章不再重复。5.8 起为出厂项目常用的系统定制项。 ==== 5.1 声卡使用方法 ==== <code bash> aplay -l # 查看声卡与设备列表 aplay /nodka_test/LR_audio.wav -D hw:0,0 # 指定声卡设备播放 arecord -d 5 -f cd -r 44100 -c 2 -t wav test.wav aplay test.wav </code> 音量调节: <code bash> alsamixer amixer -c 0 set 'Playback' 80% </code> **提示:**整机播放在 SPK 端子(PH2.0-4P)输出,需外接 8Ω 喇叭;MIC 走 Ø3.5 接口。 ==== 5.2 网络使用方法 ==== === 5.2.1 以太网 ==== **查看网口** <code bash> ifconfig -a ip link show </code> **命令行设置静态 IP** 1. 用 vim 打开网络配置文件:vim /etc/network/interfaces 2. 按现场网络修改 IP、掩码、网关(整机为单网口,只配 eth0) <code bash> auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.2.110 netmask 255.255.255.0 gateway 192.168.2.1 </code> 3. 保存退出(vim 下按 Esc,输入 :wq),重启系统使配置生效。 **提示:**Ubuntu 20.04 默认由 NetworkManager 接管网络,/etc/network/interfaces 里的配置可能不生效;此时改用 5.2.2 的 nmcli 写法,或先停用 NetworkManager 再用本节方式。 **设置 DNS** <code bash> vi /etc/resolv.conf nameserver 114.114.114.114 </code> **网络优先级** <code bash> # 临时修改,数值越小优先级越高 sudo ifmetric eth0 100 # 永久修改 sudo nmcli connection modify "有线连接名称" connection.autoconnect-priority 1 sudo nmcli connection modify "有线连接名称" ipv4.route-metric 100 sudo nmcli connection modify "有线连接名称" connection.autoconnect yes sudo systemctl restart NetworkManager </code> **验证** <code bash> ping -c 4 192.168.2.1 ping -c 4 www.baidu.com </code> **提示:**图形界面(Debian 桌面)可在「About NetworkManager Applet → Edit Connections…」中直接设置 IP、掩码、网关;没有现成连接时点右下角 + 新建。 === 5.2.2 WiFi ==== **查询并启用无线网卡** <code bash> ifconfig -a # 无线网卡通常为 wlan0 ifconfig wlan0 up # 启用无线网卡 iw dev wlan0 scan # 扫描热点,获取 SSID、信号强度、加密方式 </code> **连接无线网络** <code bash> nmcli d wifi connect "SSID" password "PASSWORD" </code> **静态 IP** <code bash> sudo nmcli connection modify NODKA ipv4.addresses 172.10.21.111/24 # IP / 子网掩码 sudo nmcli connection modify NODKA ipv4.gateway 172.10.21.1 # 网关 sudo nmcli connection modify NODKA ipv4.dns "114.114.114.114,61.177.7.1,8.8.8.8" # DNS sudo nmcli connection modify NODKA ipv4.method manual # 静态 sudo nmcli device disconnect wlan0 sudo nmcli device connect wlan0 </code> **动态 IP(DHCP)** <code bash> sudo nmcli connection modify NODKA ipv4.method auto sudo nmcli connection modify NODKA ipv4.addresses "" # 清除静态 IP sudo nmcli connection modify NODKA ipv4.gateway "" # 清除网关 sudo nmcli connection modify NODKA ipv4.dns "" # 清除 DNS(可选) sudo nmcli connection down NODKA sudo nmcli connection up NODKA </code> **配置为 AP 热点** <code bash> IFNAME="wlan0" # 无线网卡节点 CON_NAME="One" # 热点名称 nmcli con add type wifi ifname $IFNAME con-name $CON_NAME autoconnect yes ssid $CON_NAME nmcli con modify $CON_NAME 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared nmcli con up $CON_NAME </code> **提示:**信号弱时可调整背部 Wi-Fi/BT 天线角度,或改用吸盘天线;连接后可用 ip addr show wlan0 查看获取到的地址。 ==== 5.3 串口使用方法(Linux) ==== Linux 下串口节点与 Android 一致:RS485 为 /dev/ttyS1、/dev/ttyS3,RS232 为 /dev/ttyS2、/dev/ttyS4(以背部丝印为准)。 **测试工具** - 图形界面:CuteCom(sudo apt install cutecom),选择 /dev/ttyS2、115200、8N1 后打开 - 命令行:系统自带 com_send / com_recv <code bash> # 发送 com_send /dev/ttyS2 115200 # 接收(另开一个终端) com_recv /dev/ttyS2 115200 </code> **直接读写节点** <code bash> stty -F /dev/ttyS2 115200 cs8 -cstopb -parenb echo "hello" > /dev/ttyS2 # 发送 cat /dev/ttyS2 # 接收 </code> **测试方式** 回环、对发与转接的接法见 **4.5.2**,与操作系统无关,本节不重复。 **注意事项** - 整机为 3.5mm 3P 可插拔端子(无 DB9),配压接端子或转接线使用;线序反接(A / B、R / T)会直接导致通信失败 - RS485 为半双工,方向由硬件自动切换,收发切换时注意帧间隔 - 提示无权限时把当前用户加入 dialout 组:sudo usermod -aG dialout $USER(重新登录生效) ==== 5.4 GPIO使用方法(sysfs) ==== Linux 下统一通过 /sys/class/gpio 访问。端子脚位规则与系统 GPIO 编号见 **2.3**,本节只给操作命令。 **1. 查看相关 IO 是否导出** <code bash> cd /sys/class/gpio ls </code> **2. 设置 GPO(系统配置)** <code bash> for i in {95,94,21,22,140,141}; do echo out >gpio$i/direction; done for i in {13,14,96,93,108,107}; do echo out >gpio$i/direction; done </code> **3. 设置 GPO 高 / 低** 输出高电平: <code bash> for i in {95,94,21,22,140,141}; do echo 1 >gpio$i/value; done for i in {13,14,96,93,108,107}; do echo 1 >gpio$i/value; done </code> 回读当前电平: <code bash> for i in {95,94,21,22,140,141}; do cat /sys/class/gpio/gpio$i/value; done </code> 输出低电平: <code bash> for i in {95,94,21,22,140,141}; do echo 0 >gpio$i/value; done for i in {13,14,96,93,108,107}; do echo 0 >gpio$i/value; done </code> **4. 设置 GPI(系统配置)** <code bash> for i in {13,14,96,93,108,107}; do echo in >gpio$i/direction; done </code> **5. 获取 GPI value** <code bash> for i in {13,14,96,93,108,107}; do cat /sys/class/gpio/gpio$i/value; done for i in {95,94,21,22,140,141,13,14,96,93,108,107}; do cat /sys/class/gpio/gpio$i/direction; done </code> **提示:**GPIO 编号为内核 gpiochip 全局编号,不同固件版本可能整体偏移;若 /sys/class/gpio 下没有对应节点,先执行 echo 编号 > /sys/class/gpio/export 导出后再操作。 ==== 5.5 USB与SD卡挂载 ==== **U 盘识别** <code bash> dmesg | tail -20 # 插入后内核提示,可见设备名为 sda / sda1 lsblk # 查看块设备及挂载点 </code> **挂载与卸载** <code bash> mkdir -p /mnt/USB1 mount /dev/sda1 /mnt/USB1 df -h umount /mnt/USB1 </code> **SD 卡** <code bash> fdisk -l # SD 卡设备名通常为 /dev/mmcblk1p1 mount /dev/mmcblk1p1 /mnt/sdcard umount /mnt/sdcard </code> **提示:**ext4 / vfat 可直接挂载;NTFS 需安装 ntfs-3g,exFAT 需 exfat-fuse。Android 下的查看方式见 4.6。 ==== 5.6 分辨率与HDMI ==== 内部屏分辨率由机型固定(见 1.3 型号与配置),HDMI 外接输出可通过 xrandr 调整。 **X11 桌面** <code bash> xrandr # 查看输出与可用模式 xrandr --output HDMI-1 --mode 1920x1080 --rate 60 xrandr -o left # 左旋 90° xrandr -o right # 右旋 90° xrandr -o inverted # 翻转 180° xrandr -o normal # 恢复 </code> **临时添加自定义分辨率** <code bash> cvt 800 750 # 800x750 59.86 Hz (CVT) ... Modeline "800x750_60.00" 48.50 800 840 920 1040 750 753 763 779 -hsync +vsync xrandr --newmode "800x750_60.00" 48.50 800 840 920 1040 750 753 763 779 -hsync +vsync xrandr --addmode HDMI-1 800x750_60.00 xrandr --output HDMI-1 --mode 800x750_60.00 </code> **Wayland / Weston(使用 Wayland 会话时)** Ubuntu 20.04 默认使用 Xorg,xrandr 方式适用;若改用 Wayland 会话,Wayland 下不支持 xrandr,编辑 /etc/xdg/weston/weston.ini: <code bash> [output] name=HDMI-A-1 mode=1920x1080 </code> 修改后重启系统或 weston 服务生效。 **双屏模式** 同显(镜像)与异显(扩展)两种模式的定义见 **4.8**。Linux 下由桌面显示设置或 xrandr 控制两路输出的开关与位置。 ==== 5.7 远程访问及文件传输 ==== <code bash> sudo apt update && sudo apt install -y openssh-server sudo systemctl enable --now ssh ip addr show </code> 电脑端传输: <code bash> scp ./update.img root@192.168.8.55:/home/root/ </code> 图形化工具可用 WinSCP / FileZilla,协议 SFTP,端口 22。 ==== 5.8 开机自动执行程序 ==== 按启动时机分三种,按需选择,可叠加使用:**登录前 → 登录时 → 进入图形界面后**。同一程序只放一处即可。 === 5.8.1 登录前执行 === 适用于不依赖桌面、开机就要跑的后台服务。 - 编辑 /etc/rc.local 文件 - 在 exit 0 之前加入程序调用 - 保存退出(按 Esc,输入 :wq 回车) <code bash> sudo vim /etc/rc.local # 在 exit 0 之前添加 /path/to/myprogram & exit 0 </code> **说明:**/path/to/myprogram 为程序完整路径;行尾的 & 让程序在后台运行,否则会阻塞后续登录流程。文件最后一行必须是 exit 0,脚本才会被执行。 **提示:**Ubuntu 20.04 默认未启用 /etc/rc.local,需确认 rc-local.service 已启用;只支持 systemd 的场景建议改用自建 service 或 5.8.3 的启动脚本。 === 5.8.2 登录后执行 === 只对当前用户生效,在用户登录完成时执行。 - 编辑用户配置文件 ~/.profile - 在文件末尾追加启动命令 - 保存退出 - 执行 source ~/.profile 使改动立即生效 <code bash> vim ~/.profile # 文件末尾追加 /path/to/myprogram & source ~/.profile </code> **提示:**~/.profile 仅对当前用户生效;需要所有用户生效时改 /etc/profile。 === 5.8.3 进入图形界面后执行 === 桌面起来之后才需要显示界面的应用(如全屏主程序)放这里。 **Debian(LXDE)** - 编辑自启动文件 - 在末尾追加启动命令 - 保存退出,重启或重新登录生效 <code bash> vim /root/.config/lxsession/LXDE/autostart # 末尾追加 /path/to/myprogram > /dev/null 2>&1 & </code> **Ubuntu** Ubuntu 下统一由启动脚本托管,把命令写进 /nodka_test/autorun.sh(该脚本在桌面启动后自动执行)。 <code bash> sudo vim /nodka_test/autorun.sh # 末尾追加 /path/to/myprogram > /dev/null 2>&1 & </code> **提示:**> /dev/null 2>&1 用于丢弃程序输出,避免日志写满分区;& 保证后台运行。 ==== 5.9 界面与显示自定义 ==== === 5.9.1 状态栏自定义 === LXDE 面板(任务栏 / 菜单栏)的配置保存在: <code> $HOME/.config/lxpanel/LXDE/panels/panel </code> 用文本编辑器打开即可增删插件、调整位置与尺寸;改完执行 lxpanelctl restart,或重新登录生效。 === 5.9.2 屏蔽桌面环境 === 桌面自启动文件 /root/.config/lxsession/LXDE/autostart 的默认内容: <code> @lxpanel --profile LXDE @pcmanfm --desktop --profile LXDE @xscreensaver -no-splash pulseaudio -D /nodka_test/autorun.sh </code> ^ 行 ^ 作用 ^ | @lxpanel --profile LXDE | 启动 LXDE 面板(任务栏与菜单) | | @pcmanfm --desktop --profile LXDE | 以 PCManFM 接管桌面,负责壁纸与图标 | | @xscreensaver -no-splash | 屏幕保护程序 | | pulseaudio -D | 启动音频服务 | | /nodka_test/autorun.sh | 桌面起来后执行的自启动脚本 | 屏蔽桌面、只显示应用界面,把前三行注释掉即可: <code> #@lxpanel --profile LXDE #@pcmanfm --desktop --profile LXDE #@xscreensaver -no-splash pulseaudio -D /nodka_test/autorun.sh </code> **提示:**注释掉面板与 PCManFM 后,桌面无任务栏、无壁纸图标,仅显示自启动程序窗口,适合整机出厂即全屏应用的场景。 === 5.9.3 更换开机LOGO === 开机 LOGO 存放在 resource 分区。按 ① ~ ⑥ 顺序在整机 Linux 终端执行(需 root 权限):需要执行命令的步骤,说明文字与紧随其后的代码块对应;④ 的文件位置见下表。 **① 准备 BMP 图片** 准备 BMP 格式图片,并把图片尺寸设为屏幕分辨率大小(如 HDMI 1920×1080)。 **② 拷贝 bmpconvert 工具并赋予可执行权限** {{wiki:bmpconvert.zip|下载 bmpconvert 转换工具(2.3 KB,解压即得脚本)}},解压后拷贝到 /usr/bin: <code bash> sudo cp bmpconvert /usr/bin/ sudo chmod +x /usr/bin/bmpconvert </code> **③ 挂载 resource 分区** <code bash> sudo mount /dev/block/by-name/resource /mnt </code> **④ 放置开机 LOGO 文件** 把 BMP 图片按屏幕类型放入 /mnt 对应文件名: ^ 屏幕类型 ^ 文件位置 ^ | HDMI / eDP / LVDS | /mnt/logo.bmp、/mnt/logo_kernel.bmp | | MIPI | /mnt/logo_mipi.bmp、/mnt/logo_kernel_mipi.bmp | **⑤ 执行 bmpconvert 转换** HDMI / eDP / LVDS 屏执行: <code bash> sudo bmpconvert /mnt/logo.bmp sudo bmpconvert /mnt/logo_kernel.bmp </code> MIPI 屏改用对应文件名: <code bash> sudo bmpconvert /mnt/logo_mipi.bmp sudo bmpconvert /mnt/logo_kernel_mipi.bmp </code> **报错处理:**若步骤 ⑤ 出现如下输出,说明系统只有 python3、缺少 python 命令: <code> root@rk3568: bmpconvert /mnt/logo.bmp /usr/bin/env: 'python': No such file or directory root@rk3568: bmpconvert /mnt/logo_kernel.bmp /usr/bin/env: 'python': No such file or directory </code> 先建立 python 软链,再重跑步骤 ⑤ 的两条命令: <code bash> sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 sudo bmpconvert /mnt/logo.bmp sudo bmpconvert /mnt/logo_kernel.bmp </code> **⑥ 重启系统** <code bash> sudo reboot </code> **提示:**logo.bmp 为 U-Boot 阶段显示,logo_kernel.bmp 为内核启动阶段显示,两个都要替换。修改前建议先备份 /mnt 下的原文件。 === 5.9.4 切换不同LCD显示屏 === **HDMI**:系统默认支持,默认输出 1920×1080,无需设置。 **eDP / LVDS**:屏参与屏体必须匹配。终端执行 dis 调出屏参设置界面,选择对应屏参后点击 Save,重启生效。 <code bash> dis </code> {{wiki:cm_lcd_sml.png?620}} Display Settings 屏参设置界面:选择与屏体一致的参数,点击 Save 保存。 === 5.9.5 屏幕旋转 === **Debian:修改 xorg 配置** - 先用 xrandr 查看屏幕节点名(如 eDP-1、HDMI-1) - 编辑 /etc/X11/xorg.conf.d/20-modesetting.conf - 修改 Option "Rotate" 取值后重启 <code> Section "Monitor" Identifier "eDP-1" # 屏幕节点名,用 xrandr 查询 Option "Rotate" "inverted" # 旋转方向,见下表 EndSection </code> ^ 取值 ^ 旋转角度 ^ | normal | 0°(默认) | | right | 顺时针 90° | | inverted | 顺时针 180° | | left | 顺时针 270° | **Ubuntu:使用 xrandr** <code bash> xrandr --output HDMI-1 --rotate left # 向左旋转 90° xrandr --output HDMI-1 --rotate right # 向右旋转 90° xrandr --output HDMI-1 --rotate inverted # 旋转 180° xrandr --output HDMI-1 --rotate normal # 恢复默认 </code> **提示:**把旋转命令放到 /nodka_test/autorun.sh 末尾,可开机自动生效。 **触摸旋转** 屏幕旋转后触摸坐标会错位,需同步修改 /usr/share/X11/xorg.conf.d/40-libinput.conf 中的 CalibrationMatrix: <code> Section "InputClass" Identifier "libinput touchscreen catchall" Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1" MatchIsTouchscreen "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection </code> ^ 屏幕方向 ^ CalibrationMatrix ^ | 0°(默认) | 1 0 0 0 1 0 0 0 1 | | 90°(顺时针) | 0 1 0 -1 0 1 0 0 1 | | 180°(上下颠倒) | -1 0 1 0 -1 1 0 0 1 | | 270°(逆时针 90°) | 0 -1 1 1 0 0 0 0 1 | ==== 5.10 OTA在线升级固件 ==== === 5.10.1 通过网络OTA === 升级由板内 /usr/bin/ota 脚本完成。按实际情况编辑该脚本、设置 FTP 地址与账号,并把相应固件放到 FTP 下载地址,然后执行 ota。需要改动的文件与对应代码如下。 **① 编辑升级脚本 /usr/bin/ota** <code bash> sudo vim /usr/bin/ota </code> **② 在脚本中设置以下三项** <code> URL=ftp://<固件服务器地址> USERNAME=<用户名> PASSWORD=<密码> </code> **③ 保存后执行升级** <code bash> ota </code> 按提示完成升级。 **提示:**服务器地址、账号与固件目录由我司提供;升级过程请勿断电,完成后设备自动重启。 === 5.10.2 使用U盘在线升级 === Linux 下由板内 /usr/bin/ota 脚本执行在线升级,U 盘作为固件暂存盘。按 ① ~ ⑤ 顺序操作:需要执行命令的步骤,说明文字与紧随其后的代码块一一对应;③④ 为条件确认,无需执行命令。 **① 解除 U 盘挂载** <code bash> sudo umount /dev/sdb </code> **② 格式化 U 盘为 ext4** <code bash> sudo mkfs.ext4 /dev/sdb </code> **③ 确认系统支持在线升级** 板内需已具备 /usr/bin/ota 脚本(脚本配置见 5.10.1)。 **④ 确认 U 盘规格** U 盘需格式化为 linux ext4 格式,可用容量大于 8G,否则升级包无法写入。 **⑤ 插网线、插 U 盘,执行升级** <code bash> ota </code> 按提示完成升级,过程中请勿断电,完成后设备自动重启。 **提示:**/dev/sdb 为 U 盘常见设备节点,实际以 lsblk 结果为准。本节是 Linux 在线升级(ext4、≥8G、ota 命令),与 3.4 的 Android U 盘升级(FAT32、update.img)、4.13 的 Android 在线升级是两套流程,不要混用。 ==== 5.11 交叉编译环境 ==== === 5.11.1 apt安装交叉编译环境 ==== Debian / Ubuntu 主机上一条命令即可装好 aarch64 交叉工具链,再用 -v 确认版本: <code bash> sudo apt install -y crossbuild-essential-arm64 aarch64-linux-gnu-gcc -v </code> === 5.11.2 下载指定版本工具链 ==== 需要特定版本时,从 ARM 官方下载对应工具链(developer.arm.com/downloads/-/gnu-a),解压后把 bin 目录加入 PATH: <code bash> export PATH=$PATH:/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/ aarch64-none-linux-gnu-gcc --version </code> **提示:**写入 ~/.bashrc 或 /etc/profile 可永久生效;路径按实际解压目录替换。 === 5.11.3 工具链下载 === 常用交叉编译工具链与获取方式: * **aarch64-linux-gnu-gcc 交叉工具链**:SDK prebuilts 目录内提供 * **arm-linux-gnueabihf 交叉工具链**:用于 32 位用户态程序编译 * **x86 主机交叉编译 arm64 工具链**:ARM 官方发布,用于在 x86_64 主机上编译 aarch64(arm64)程序 **下载:**[[https://pan.baidu.com/s/1OjJVuzDB3hFMgO6yS3EAZw|gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz]] 百度网盘 <html><span class="sml-code">提取码 hkku</span></html> **提示:**该工具链免安装,解压后把压缩包内 bin 目录加入 PATH 即可;编译时调用 aarch64-none-linux-gnu-gcc。 ==== 5.12 Qt应用开发 ==== 预置环境:**Debian 11 → Qt 5.15.2**,**Ubuntu 20.04 → Qt 5.12.8**。两种方式按条件选择。 === 5.12.1 导入Docker镜像编译 === 用现成编译镜像,主机无需安装 Qt,隔离性好,适合批量编译。 - 导入镜像 - 启动容器,把应用目录挂载到 /mnt(source 换成实际路径) - 容器内进入 /mnt 执行 qmake 与 make <code bash> sudo docker load < nodka_docker_qt_build_20230223.tar sudo docker run --rm --mount type=bind,source=/home/APP_PATH,target=/mnt/ -i -t 09a37c1b2fc3 /bin/bash cd /mnt qmake make </code> **提示:**镜像体积较大,由我司单独提供;容器 ID(09a37c1b2fc3)以 docker images 实际输出为准。 === 5.12.2 板端搭建Qt编译环境 === **1. 安装 Qt Creator** <code bash> sudo apt-get install qtcreator sudo apt-get install qt5-default </code> 若 qt5-default 已被官方仓库移除,改用下面这组依赖: <code bash> sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator </code> **2. 添加 qmake** Qt Creator → Tools → Options → Kits → Qt Versions → Add,选择板内 qmake: <code> /usr/local/qt5.12-arm/bin/qmake </code> {{wiki:qt_set_qmake.png?620}} 在 Qt Versions 中添加板内 qmake 路径。 **3. 配置交叉编译器** 同一窗口切到 Compilers → Add → GCC,分别添加 g++ 与 gcc: <code> g++:/usr/bin/aarch64-linux-gnu-g++ gcc:/usr/bin/aarch64-linux-gnu-gcc </code> g++ 编译器位置: {{wiki:qt_set_compiler_gpp.png?620}} gcc 编译器位置: {{wiki:qt_set_compiler_gcc.png?620}} 添加交叉编译器;主机装的是 crossbuild-essential-arm64 时编译器在 /usr/bin 下,用第三方工具链时填其安装路径。 **4. 配置 Debugger(可选,在线调试用)** <code bash> sudo apt install -y gdb-multiarch </code> 板端需存在 /usr/bin/gdbserver,没有则安装 gdbserver(Buildroot 自带,无需安装)。在 Qt Creator 的 Debuggers 中添加 /usr/bin/gdb-multiarch。 {{wiki:qt_set_debugger.png?620}} **5. 配置 Devices** 填入板卡 IP 与用户名 root;建议给板卡设置静态 IP,避免调试中断线。 {{wiki:qt_set_device.png?620}} **6. 配置 Kits** 把前面的 Qt 版本、编译器、调试器、设备组合成一个 Kit。目标系统为 Ubuntu 时,还需在 Kit 中填写 sysroot 路径。 {{wiki:qt_set_kits_std.png?620}} 在 Kits 中组合 Qt 版本、编译器、调试器与设备。 ==== 5.13 视频硬件编解码支持 ==== 板载 VPU 支持 H.264 / H.265 硬件编解码,系统已带 GStreamer 插件与 OpenGL ES / OpenCL 运行库。 **GStreamer 编解码** 系统自带测试脚本,直接运行即可验证硬解与硬编: <code bash> /rockchip-test/video/test_dec-gst.sh # 硬解测试 /rockchip-test/video/test_enc-gst.sh # 硬编测试 </code> **OpenGL ES** 用 glmark2 跑分验证 GPU: <code bash> glmark2-es2 </code> **WebGL** 打开 Chromium,在地址栏输入以下地址,查看 WebGL 与硬件加速状态: <code> chrome://gpu </code> **OpenCL** <code bash> clinfo </code> {{wiki:cm_clinfo.png?620}} clinfo 输出:确认平台、设备与 OpenCL 版本信息。 ===== 6 通用方法 ===== 本章为查询类命令,Android(adb shell)与 Linux 终端下基本一致,个别命令已在条目中注明差异。 ==== 6.1 查看CPU温度 ==== <code bash> cat /sys/class/thermal/thermal_zone0/temp # 输出为毫摄氏度,45200 表示 45.2℃ </code> ==== 6.2 查看CPU序列号 ==== <code bash> cat /proc/device-tree/serial-number # Android 下 getprop ro.serialno </code> ==== 6.3 查看CPU频率 ==== <code bash> cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies </code> ==== 6.4 查看内存容量 ==== <code bash> free -h cat /proc/meminfo | head -3 </code> ==== 6.5 查看存储容量 ==== <code bash> df -h lsblk </code> ==== 6.6 网络Ping测试 ==== <code bash> ping -c 4 192.168.8.1 ping -c 4 www.baidu.com ping -c 1 -W 1 8.8.8.8 </code> ==== 6.7 设置系统时间保存到RTC芯片 ==== <code bash> # 查看系统时间 date # 设置系统时间并写入 RTC 芯片 sudo date -s "2025-04-08 17:01:01" sudo hwclock -w sudo hwclock -r </code> **验证**:关机断电 5 秒以上再开机,用 date 查看时间是否保持。 **提示:**系统默认启用网络对时,RTC 测试需在断开外网的情况下进行。 **时区设置** <code bash> ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime reboot </code> 图形界面可在「首选项 → 时间和日期」中选择时区,设置其他时区只需把命令中的 Asia/Shanghai 换成对应城市。 ===== 7 附录 ===== ==== 7.1 常见问题排查 ==== ^ 现象 ^ 可能原因 ^ 处理方式 ^ | 烧录工具一直显示「没有发现设备」 | 未进入 Loader / USB 驱动异常 / 线材问题 | 按 3.3 步骤 ④ 重新进入;驱动卸载后重装;更换 USB 口与数据线 | | 设备管理器出现未知设备 | 瑞芯微 USB 驱动未装好 | 见 3.2,重新安装 DriverInstall | | ADB 无法连接 | 未开启 USB 调试 / 接错 USB 口 | 见 4.1;确认接的是蓝色 USB3.0/OTG 下口 | | 串口打不开或无数据 | 节点选错 / 无权限 / A-B 或 R-T 反接 | 见 4.5、5.3;按丝印核对节点与线序 | | GPIO 读写无反应 | 未 export / 编号随固件偏移 | 见 2.3、5.4;先 export 再操作 | | 触摸无响应或坐标错位 | 触摸 USB 线松动 / 旋转后未改 CalibrationMatrix | 见 4.10、5.9.5 | | 屏幕旋转后界面正常但触摸反向 | 未同步修改 libinput 校准矩阵 | 见 5.9.5 触摸旋转表 | | 开机 LOGO 不生效 | 只替换了其中一张 / 未执行 bmpconvert | 见 5.9.3,两张 logo 都要替换并转换 | | 静态 IP 配置不生效 | NetworkManager 与 ifupdown 并存 | 见 5.2.1 提示 | | U 盘升级无提示 | 文件名不是 update.img / 格式不是 FAT32 | 见 3.4.1,改名并重新格式化为 FAT32 | ==== 7.2 文档信息与修订记录 ==== ^ 项目 ^ 内容 ^ | 适用产品 | sTPC-E101 / E121 / E150 / E156 / E170 / E215-3568B | | 主控平台 | Rockchip RK3568(4 × Cortex-A55 @2.0GHz,1TOPS NPU) | | 适用系统 | Android 11、Ubuntu 20.04(Debian 11 按项目配置) | | 文档版本 | v1.4 | | 更新日期 | 2026-11-11 | ^ 版本 ^ 日期 ^ 修订内容 ^ | v1.4 | 2026-11-11 | 全文口径对齐:统一串口组数与丝印、电源范围、系统范围、接口数量口径;GPIO 与 OTA 去重;补 SD 卡 / GPIO / 编解码规格;新增 4.13 与第 7 章附录 | 历史版本请向技术支持索取。 ==== 7.3 技术支持 ==== * 固件、烧录工具、SDK 与规格书获取:联系销售或技术支持 * 反馈问题时请提供:整机 SN(查看方法见 6.2)、系统版本、复现步骤与截图 * 自行修改系统后出现异常,建议先重新烧录出厂固件(见 3.3)再判断是否为硬件问题 <html><style> #pt-lang{padding:0 10px 0 6px;white-space:nowrap;line-height:1.2;} #pt-lang label{font-size:11px;color:#54595d;margin-right:5px;vertical-align:middle;} #sml-lang{font-size:11px;padding:2px 4px;border:1px solid #c8ccd1;border-radius:3px;background:#fff;color:#202122;vertical-align:middle;cursor:pointer;max-width:112px;} #sml-lang:focus{outline:2px solid #36c;outline-offset:1px;} </style></html> <html><script> (function(){ /* 中英页面配对表:新增产品时在两处(中文页ID / 英文页ID)各加一行,四份脚本保持一致 */ var PAIR={ '首页':'en:home', 'arm触控一体机:stpc-sxxx-3568b系列':'en:stpc-exxx-3568b' }; var UI={ '更新个人信息':'Preferences','个人设置':'Preferences','我的讨论':'My talk', '显示源文件':'Show source','创建该页面':'Create this page', '该主题尚不存在':'This topic does not yet exist', '您访问的页面并不存在。':'This page does not exist yet.', '用于Dokuwiki的vector主题':'Vector template for DokuWiki', '可打印版本':'Printable version','打印/导出':'Print / export', '最近更改':'Recent changes','媒体管理器':'Media manager', '网站地图':'Sitemap','永久链接':'Permanent link','引用此文':'Cite this page', '搜索这个文本':'Search this text','您的足迹:':'You are here:', '最后更改:':'Last modified:','修订记录':'History', '登录':'Log in','登出':'Log out','退出':'Log out','管理':'Admin', '文章':'Page','讨论':'Discussion','阅读':'Read','编辑':'Edit', '导航':'Navigation','首页':'Home','帮助':'Help','联系我们':'Contact us', '工具':'Tools','搜索':'Search',' 由 ':' by ' }; var TITLE={'en:home':'Home','en:stpc-exxx-3568b':'sTPC-EXXX-3568B Series'}; var CUR=(window.JSINFO&&JSINFO.id)||''; var ZH='',EN='',HERE=''; for(var k in PAIR){ if(CUR===k){ZH=k;EN=PAIR[k];HERE='zh';break;} if(CUR===PAIR[k]){ZH=k;EN=CUR;HERE='en';break;} } if(!HERE) return; function pref(){try{return localStorage.getItem('sml_lang')||'zh';}catch(e){return 'zh';}} function setPref(v){try{localStorage.setItem('sml_lang',v);}catch(e){}} function url(id){return '/dokuwiki/doku.php?id='+encodeURIComponent(id);} /* 记住语言:仅把「选过 English 的访客」从中文页导向英文页;直接访问英文页不回跳 */ (function(){ if(HERE!=='zh'||pref()!=='en') return; if(location.search.indexOf('sml=1')>-1) return; location.replace(url(EN)+'&sml=1'); })(); function translate(root){ var keys=Object.keys(UI).sort(function(a,b){return b.length-a.length;}); var w=document.createTreeWalker(root,NodeFilter.SHOW_TEXT,null,false),n,buf=[]; while(n=w.nextNode()){ if(!n.nodeValue||!n.nodeValue.trim()) continue; var p=n.parentNode; if(p&&(p.nodeName==='SCRIPT'||p.nodeName==='STYLE'||p.nodeName==='OPTION')) continue; buf.push(n); } for(var i=0;i<buf.length;i++){ var v=buf[i].nodeValue,o=v; for(var j=0;j<keys.length;j++) v=v.split(keys[j]).join(UI[keys[j]]); if(v!==o) buf[i].nodeValue=v; } var els=root.querySelectorAll('[title],[alt],[placeholder]'),attrs=['title','alt','placeholder']; for(var e=0;e<els.length;e++){ for(var a=0;a<attrs.length;a++){ var val=els[e].getAttribute(attrs[a]); if(!val) continue; var nv=val; for(var j2=0;j2<keys.length;j2++) nv=nv.split(keys[j2]).join(UI[keys[j2]]); if(nv!==val) els[e].setAttribute(attrs[a],nv); } } } function boot(){ if(HERE==='en'||pref()==='en'){ var sels=['#head','#panel','.catlinks','#footer']; for(var i=0;i<sels.length;i++){ var el=document.querySelector(sels[i]); if(el) translate(el); } var th=document.querySelector('#dw__toc h3'); if(th){ var w=document.createTreeWalker(th,NodeFilter.SHOW_TEXT,null,false),n; while(n=w.nextNode()) n.nodeValue=n.nodeValue.split('目录').join('Contents'); } document.documentElement.setAttribute('lang','en'); document.documentElement.setAttribute('xml:lang','en'); if(TITLE[CUR]) document.title=document.title.replace(CUR,TITLE[CUR]); } var ul=document.querySelector('#p-personal > ul'); if(!ul||document.getElementById('pt-lang')) return; var li=document.createElement('li'); li.id='pt-lang'; var lab=document.createElement('label'); lab.htmlFor='sml-lang'; lab.textContent=(HERE==='en'||pref()==='en')?'Language':'语言'; var sel=document.createElement('select'); sel.id='sml-lang'; sel.setAttribute('aria-label',(HERE==='en'||pref()==='en')?'Language':'语言'); var o1=document.createElement('option'); o1.value='zh'; o1.textContent='简体中文'; var o2=document.createElement('option'); o2.value='en'; o2.textContent='English'; sel.appendChild(o1); sel.appendChild(o2); sel.value=(HERE==='en')?'en':pref(); li.appendChild(lab); li.appendChild(sel); ul.appendChild(li); sel.addEventListener('change',function(){ var v=this.value; setPref(v); var t=(v==='en')?EN:ZH; if(t&&t!==CUR) location.href=url(t); else location.reload(); }); } if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',boot); else boot(); })(); </script></html>
您的足迹:
登录
文章
讨论
阅读
显示源文件
修订记录
搜索
导航
首页
Main_En
帮助
联系我们
打印/导出
可打印版本
工具
最近更改
媒体管理器
网站地图
永久链接
引用此文