Consolidating seb/saltylab into saltylab-firmware before deleting the seed repo. - 16 OpenSCAD CAD models → cad/ - Design docs (SALTYLAB.md, PLATFORM.md, AGENTS.md, board-viz.html) → docs/
276 lines
12 KiB
HTML
276 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>GEPRC GEP-F722-45A AIO — Board Layout</title>
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body { background: #1a1a2e; color: #eee; font-family: 'Courier New', monospace; display: flex; flex-direction: column; align-items: center; padding: 20px; }
|
|
h1 { color: #e94560; margin-bottom: 5px; font-size: 1.4em; }
|
|
.subtitle { color: #888; margin-bottom: 20px; font-size: 0.85em; }
|
|
.container { display: flex; gap: 30px; align-items: flex-start; flex-wrap: wrap; justify-content: center; }
|
|
.board-wrap { position: relative; }
|
|
.board { width: 400px; height: 340px; background: #1a472a; border: 3px solid #333; border-radius: 8px; position: relative; box-shadow: 0 0 20px rgba(0,0,0,0.5); }
|
|
.board::before { content: 'GEPRC GEP-F722-45A AIO'; position: absolute; top: 8px; left: 50%; transform: translateX(-50%); color: #fff3; font-size: 10px; letter-spacing: 2px; }
|
|
|
|
/* Mounting holes */
|
|
.mount { width: 10px; height: 10px; background: #111; border: 2px solid #555; border-radius: 50%; position: absolute; }
|
|
.mount.tl { top: 15px; left: 15px; }
|
|
.mount.tr { top: 15px; right: 15px; }
|
|
.mount.bl { bottom: 15px; left: 15px; }
|
|
.mount.br { bottom: 15px; right: 15px; }
|
|
|
|
/* MCU */
|
|
.mcu { width: 80px; height: 80px; background: #222; border: 1px solid #555; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; align-items: center; justify-content: center; font-size: 9px; color: #aaa; text-align: center; line-height: 1.3; }
|
|
.mcu .dot { width: 5px; height: 5px; background: #666; border-radius: 50%; position: absolute; top: 4px; left: 4px; }
|
|
|
|
/* IMU */
|
|
.imu { width: 32px; height: 32px; background: #333; border: 1px solid #e94560; position: absolute; top: 85px; left: 60px; display: flex; align-items: center; justify-content: center; font-size: 7px; color: #e94560; }
|
|
.imu::after { content: 'CW90°'; position: absolute; bottom: -14px; color: #e94560; font-size: 8px; white-space: nowrap; }
|
|
|
|
/* Arrow showing CW90 rotation */
|
|
.rotation-arrow { position: absolute; top: 72px; left: 55px; color: #e94560; font-size: 18px; }
|
|
|
|
/* Pads */
|
|
.pad { position: absolute; display: flex; align-items: center; gap: 4px; font-size: 10px; cursor: pointer; }
|
|
.pad .dot { width: 12px; height: 12px; border-radius: 50%; border: 2px solid; display: flex; align-items: center; justify-content: center; font-size: 7px; font-weight: bold; }
|
|
.pad:hover .label { color: #fff; }
|
|
.pad .label { transition: color 0.2s; }
|
|
.pad .sublabel { font-size: 8px; color: #888; }
|
|
|
|
/* UART colors */
|
|
.uart1 .dot { background: #2196F3; border-color: #64B5F6; }
|
|
.uart2 .dot { background: #FF9800; border-color: #FFB74D; }
|
|
.uart3 .dot { background: #9C27B0; border-color: #CE93D8; }
|
|
.uart4 .dot { background: #4CAF50; border-color: #81C784; }
|
|
.uart5 .dot { background: #F44336; border-color: #EF9A9A; }
|
|
|
|
/* Component dots */
|
|
.comp { position: absolute; font-size: 9px; display: flex; align-items: center; gap: 4px; }
|
|
.comp .icon { width: 10px; height: 10px; border-radius: 2px; }
|
|
|
|
/* LED */
|
|
.led-blue { position: absolute; width: 8px; height: 8px; background: #2196F3; border-radius: 50%; box-shadow: 0 0 8px #2196F3; top: 45px; right: 50px; }
|
|
.led-label { position: absolute; top: 36px; right: 30px; font-size: 8px; color: #64B5F6; }
|
|
|
|
/* Boot button */
|
|
.boot-btn { position: absolute; width: 16px; height: 10px; background: #b8860b; border: 1px solid #daa520; border-radius: 2px; bottom: 45px; right: 40px; }
|
|
.boot-label { position: absolute; bottom: 32px; right: 30px; font-size: 8px; color: #daa520; }
|
|
|
|
/* USB */
|
|
.usb { position: absolute; width: 30px; height: 14px; background: #444; border: 2px solid #777; border-radius: 3px; bottom: -3px; left: 50%; transform: translateX(-50%); }
|
|
.usb-label { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); font-size: 8px; color: #999; }
|
|
|
|
/* Connector pads along edges */
|
|
/* Bottom row: T1 R1 T3 R3 */
|
|
.pad-t1 { bottom: 20px; left: 40px; }
|
|
.pad-r1 { bottom: 20px; left: 80px; }
|
|
.pad-t3 { bottom: 20px; left: 140px; }
|
|
.pad-r3 { bottom: 20px; left: 180px; }
|
|
|
|
/* Right side: T2 R2 */
|
|
.pad-t2 { right: 20px; top: 80px; flex-direction: row-reverse; }
|
|
.pad-r2 { right: 20px; top: 110px; flex-direction: row-reverse; }
|
|
|
|
/* Top row: T4 R4 T5 R5 */
|
|
.pad-t4 { top: 30px; left: 40px; }
|
|
.pad-r4 { top: 30px; left: 80px; }
|
|
.pad-t5 { top: 30px; right: 100px; flex-direction: row-reverse; }
|
|
.pad-r5 { top: 30px; right: 55px; flex-direction: row-reverse; }
|
|
|
|
/* ESC pads (motor outputs - not used) */
|
|
.esc-pads { position: absolute; left: 20px; top: 140px; }
|
|
.esc-pads .esc-label { font-size: 8px; color: #555; }
|
|
|
|
/* Legend */
|
|
.legend { background: #16213e; padding: 15px 20px; border-radius: 8px; min-width: 280px; }
|
|
.legend h2 { color: #e94560; font-size: 1.1em; margin-bottom: 10px; border-bottom: 1px solid #333; padding-bottom: 5px; }
|
|
.legend-item { display: flex; align-items: center; gap: 8px; margin: 6px 0; font-size: 12px; }
|
|
.legend-item .swatch { width: 14px; height: 14px; border-radius: 50%; flex-shrink: 0; }
|
|
.legend-item .arrow { color: #888; font-size: 10px; }
|
|
.legend-section { margin-top: 12px; padding-top: 8px; border-top: 1px solid #333; }
|
|
.legend-section h3 { font-size: 0.9em; color: #888; margin-bottom: 6px; }
|
|
|
|
/* Orientation guide */
|
|
.orient { margin-top: 20px; background: #16213e; padding: 15px 20px; border-radius: 8px; width: 100%; max-width: 710px; }
|
|
.orient h2 { color: #4CAF50; font-size: 1.1em; margin-bottom: 10px; }
|
|
.orient-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
|
|
.orient-item { font-size: 12px; padding: 6px 10px; background: #1a1a2e; border-radius: 4px; }
|
|
.orient-item .dir { color: #4CAF50; font-weight: bold; }
|
|
|
|
/* Axis overlay */
|
|
.axis { position: absolute; }
|
|
.axis-x { top: 50%; right: -60px; color: #F44336; font-size: 12px; font-weight: bold; }
|
|
.axis-y { bottom: -30px; left: 50%; transform: translateX(-50%); color: #4CAF50; font-size: 12px; font-weight: bold; }
|
|
.axis-arrow-x { position: absolute; top: 50%; right: -45px; transform: translateY(-50%); width: 30px; height: 2px; background: #F44336; }
|
|
.axis-arrow-x::after { content: '▶'; position: absolute; right: -12px; top: -8px; color: #F44336; }
|
|
.axis-arrow-y { position: absolute; bottom: -20px; left: 50%; transform: translateX(-50%); width: 2px; height: 20px; background: #4CAF50; }
|
|
.axis-arrow-y::after { content: '▼'; position: absolute; bottom: -14px; left: -5px; color: #4CAF50; }
|
|
|
|
.note { margin-top: 15px; color: #888; font-size: 11px; text-align: center; max-width: 710px; }
|
|
.note em { color: #e94560; font-style: normal; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>🤖 GEPRC GEP-F722-45A AIO — SaltyLab Pinout</h1>
|
|
<p class="subtitle">STM32F722RET6 + ICM-42688-P | Betaflight target: GEPR-GEPRC_F722_AIO</p>
|
|
|
|
<div class="container">
|
|
<div class="board-wrap">
|
|
<div class="board">
|
|
<!-- Mounting holes -->
|
|
<div class="mount tl"></div>
|
|
<div class="mount tr"></div>
|
|
<div class="mount bl"></div>
|
|
<div class="mount br"></div>
|
|
|
|
<!-- MCU -->
|
|
<div class="mcu"><div class="dot"></div>STM32<br>F722RET6<br>216MHz</div>
|
|
|
|
<!-- IMU -->
|
|
<div class="imu">ICM<br>42688</div>
|
|
<div class="rotation-arrow">↻</div>
|
|
|
|
<!-- LED -->
|
|
<div class="led-blue"></div>
|
|
<div class="led-label">LED PC4</div>
|
|
|
|
<!-- Boot button -->
|
|
<div class="boot-btn"></div>
|
|
<div class="boot-label">BOOT 🟡</div>
|
|
|
|
<!-- USB -->
|
|
<div class="usb"></div>
|
|
<div class="usb-label">USB-C (DFU)</div>
|
|
|
|
<!-- UART Pads - Bottom -->
|
|
<div class="pad pad-t1 uart1">
|
|
<div class="dot">T</div>
|
|
<span class="label">T1<br><span class="sublabel">PA9</span></span>
|
|
</div>
|
|
<div class="pad pad-r1 uart1">
|
|
<div class="dot">R</div>
|
|
<span class="label">R1<br><span class="sublabel">PA10</span></span>
|
|
</div>
|
|
<div class="pad pad-t3 uart3">
|
|
<div class="dot">T</div>
|
|
<span class="label">T3<br><span class="sublabel">PB10</span></span>
|
|
</div>
|
|
<div class="pad pad-r3 uart3">
|
|
<div class="dot">R</div>
|
|
<span class="label">R3<br><span class="sublabel">PB11</span></span>
|
|
</div>
|
|
|
|
<!-- UART Pads - Right -->
|
|
<div class="pad pad-t2 uart2">
|
|
<span class="label">T2<br><span class="sublabel">PA2</span></span>
|
|
<div class="dot">T</div>
|
|
</div>
|
|
<div class="pad pad-r2 uart2">
|
|
<span class="label">R2<br><span class="sublabel">PA3</span></span>
|
|
<div class="dot">R</div>
|
|
</div>
|
|
|
|
<!-- UART Pads - Top -->
|
|
<div class="pad pad-t4 uart4">
|
|
<div class="dot">T</div>
|
|
<span class="label">T4<br><span class="sublabel">PC10</span></span>
|
|
</div>
|
|
<div class="pad pad-r4 uart4">
|
|
<div class="dot">R</div>
|
|
<span class="label">R4<br><span class="sublabel">PC11</span></span>
|
|
</div>
|
|
<div class="pad pad-t5 uart5">
|
|
<span class="label">T5<br><span class="sublabel">PC12</span></span>
|
|
<div class="dot">T</div>
|
|
</div>
|
|
<div class="pad pad-r5 uart5">
|
|
<span class="label">R5<br><span class="sublabel">PD2</span></span>
|
|
<div class="dot">R</div>
|
|
</div>
|
|
|
|
<!-- ESC motor pads label -->
|
|
<div class="esc-pads">
|
|
<div class="esc-label">M1-M4 (unused)<br>PC6-PC9</div>
|
|
</div>
|
|
|
|
<!-- Board axes -->
|
|
<div class="axis-arrow-x"></div>
|
|
<div class="axis axis-x">X →<br><span style="font-size:9px;color:#888">board right</span></div>
|
|
<div class="axis-arrow-y"></div>
|
|
<div class="axis axis-y">Y ↓ (board forward = tilt axis)</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="legend">
|
|
<h2>🔌 UART Assignments</h2>
|
|
<div class="legend-item">
|
|
<div class="swatch" style="background:#2196F3"></div>
|
|
<span><b>USART1</b> T1/R1 → Jetson Nano</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<div class="swatch" style="background:#FF9800"></div>
|
|
<span><b>USART2</b> T2 → Hoverboard ESC (TX only)</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<div class="swatch" style="background:#9C27B0"></div>
|
|
<span><b>I2C2</b> T3/R3 → Baro/Mag (reserved)</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<div class="swatch" style="background:#4CAF50"></div>
|
|
<span><b>UART4</b> T4/R4 → ELRS RX (CRSF)</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<div class="swatch" style="background:#F44336"></div>
|
|
<span><b>UART5</b> T5/R5 → Debug/spare</span>
|
|
</div>
|
|
|
|
<div class="legend-section">
|
|
<h3>📡 SPI Bus</h3>
|
|
<div class="legend-item">
|
|
<span>SPI1: PA5/PA6/PA7 → IMU (CS: <em style="color:#e94560">PA15</em>)</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<span>SPI2: PB13-15 → OSD MAX7456</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<span>SPI3: PB3-5 → Flash W25Q128</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="legend-section">
|
|
<h3>⚡ Other</h3>
|
|
<div class="legend-item">
|
|
<span>🔵 LED: PC4 | 📢 Beeper: PC15</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<span>🔋 VBAT: PC2 | ⚡ Current: PC1</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<span>💡 LED Strip: PA1 (WS2812)</span>
|
|
</div>
|
|
<div class="legend-item">
|
|
<span>📍 EXTI (IMU data-ready): PA8</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="orient">
|
|
<h2>🧭 IMU Orientation (CW90° from chip to board)</h2>
|
|
<div class="orient-grid">
|
|
<div class="orient-item"><span class="dir">Board Forward</span> (tilt for balance) = Chip's +Y axis</div>
|
|
<div class="orient-item"><span class="dir">Board Right</span> = Chip's -X axis</div>
|
|
<div class="orient-item"><span class="dir">Board Pitch Rate</span> = -Gyro X (raw)</div>
|
|
<div class="orient-item"><span class="dir">Board Accel Forward</span> = Accel Y (raw)</div>
|
|
</div>
|
|
</div>
|
|
|
|
<p class="note">
|
|
⚠️ Pad positions are <em>approximate</em> — check the physical board silkscreen for exact locations.
|
|
The CW90 rotation is handled in firmware (mpu6000.c). USB-C at bottom edge for DFU flashing.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|