110 Commits
Author SHA1 Message Date
Rob Emery c2a8105dda Merge pull request #775 from brunoz78/de-stp
i18n(de): translate the new Spanning Tree texts
2026-10-31 18:53:56 +00:00
Brunoz78andClaude Opus 5.5 369912bfce i18n(de): translate the new Spanning Tree texts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 18:25:54 +01:00
feelfree69 4f23889488 Merge pull request #766 from hlyi/machine-reorg
Rename C files under machine/pcb
2026-10-31 14:04:26 +01:00
feelfree69 630533ea4f Merge pull request #629 from mintsoft/sim-rewrite
HTTPD Sim Rewrite
2026-10-31 13:44:05 +01:00
Rob Emery ff604f008f Merge pull request #765 from vankxr/fix/rjsmin-sensitivity
Add app.js to the dependency list for the asset rebuild
2026-10-31 08:29:26 +00:00
HL Yi bdb2911639 fixed PCB board name in doc. Add S1100P-8GT-1SX-S as supported device 2026-10-30 19:31:56 -05:00
HL Yi 3ea567a124 change machine name PB_2132 HG0402XG_V1_1 to complaint with naming convention 2026-10-30 19:17:36 -05:00
HL Yi 32334b9646 update pcb filename to compliant with guideline 2026-10-30 19:07:46 -05:00
HL Yi 229380cf70 change PCB_SWTG024AS_V2_0_17452_XIKESTOR.c to PCB_SWTG024AS_V2_0_17452.c as it is a managed swtich 2026-10-30 18:46:42 -05:00
HL Yi 18c24b418c change PCB_SWTG024AS_V2_0_17452.c to PCB_SWTG024AS_V2_0_17452_unmanaged.c 2026-10-30 18:45:06 -05:00
João Silva 664f7e3c4a Add app.js to the dependency list for the asset rebuild 2026-10-30 22:53:21 +00:00
René van Dorst 2866be022e Merge pull request #764 from hlyi/machine-reorg
rename files under machine
2026-10-30 21:53:01 +00:00
René van Dorst 79c00322b6 Merge pull request #759 from hlyi/doc-reorg
rename doc/devices to match PCB name
2026-10-30 21:05:39 +00:00
HL Yi cc72dae6ce restructure machine based upon new naming convention 2026-10-30 15:53:09 -05:00
Rob Emery d23583b5f1 Merge pull request #726 from L4ky/add-reset-button-webui-console
Add Factory Reset button to WebUI an command to Console
2026-10-30 18:28:01 +00:00
HL Yi af2b98be85 fix photo directory name 2026-10-30 12:28:25 -05:00
HL Yi 8d04f2fcb1 update for one device per line 2026-10-30 11:20:47 -05:00
Luca S. 94ac468bf9 Add "factory-reset" console command to reset to firmware default configuration. 2026-10-30 16:37:12 +01:00
HL Yi dd3503dd3e fix doc inconsistency 2026-10-30 09:27:07 -05:00
HL Yi 2a4fdda6eb fixed typo for PCB-AFGW-SWTG218ANS_V2.0.2_23308 2026-10-30 09:25:50 -05:00
HL Yi cba2b37db3 update spec case ONT-S207CW-Binardat-2G06-04210GSM 2026-10-30 09:20:41 -05:00
HL Yi 1997c85df6 fix photo directory name 2026-10-30 09:16:16 -05:00
HL Yi 928d9279b9 handle special case PCB-SWTG115AS-V2.1-17443 PCB-SWTG024AS-A-V2.0.1_19650-HORACO 2026-10-30 09:13:13 -05:00
HL Yi 83f335f3e8 make rename doc to match pcb name 2026-10-30 08:51:00 -05:00
logicog 96bc2707fe Merge pull request #716 from mintsoft/js-refactor
JS compression via RJSMin & app.js formatting
2026-10-30 14:49:18 +01:00
René van Dorst c41474b1a7 Merge pull request #757 from L4ky/poe-2g080110gs-fix-sfp
Fix SFP Detect Pin for Mokerlink POE-2G080110GS
2026-10-30 13:19:38 +01:00
Luca S. ffc50c4c6c Fix SFP Detect Pin 2026-10-30 13:06:43 +01:00
Rob Emery ed7442a628 This is just a direct "format" of app.js at db9a1ae
the resulting size is the same as before it was formatted when minified
through rjsmin
2026-10-30 11:18:25 +00:00
Rob Emery 71ceae44c5 Hookimng rjsmin in, at the revision tested, app.js shrank from
151206 to 148202
2026-10-30 11:17:32 +00:00
Rob Emery 445e4427f3 Adding rjsmin.py v1.3.0 for compressing the JS
Command used:
wget 'https://raw.githubusercontent.com/ndparker/rjsmin/refs/tags/1.3.0/rjsmin.py'
2026-10-30 11:17:32 +00:00
Rob Emery 29718a783d Merge pull request #755 from elissa2333/i18n/zh-cn
i18n: improve Simplified Chinese translations
2026-10-30 10:32:55 +00:00
René van Dorst 763f47fa76 Merge pull request #756 from rwalli/doc-sodola-sl-swtgw215as-d
doc: add Sodola SL-SWTGW215AS-D as brand of ZX-SWTGW215AS
2026-10-30 11:12:15 +01:00
rwalli@gmx.at 726d61b778 doc: add Sodola SL-SWTGW215AS-D as brand of ZX-SWTGW215AS 2026-10-30 10:55:13 +01:00
René van Dorst 6f3d4428d4 Merge pull request #749 from vankxr/device/zx_sg4t2
Add machine files for Horaco ZX-SG4T2
2026-10-30 10:54:25 +01:00
niconiconi db9a1ae35f i18n: improve Simplified Chinese translations 2026-10-30 17:29:09 +08:00
Rob Emery c494eeb7a7 Merge pull request #752 from Marco02Arduino/main
Add reset functionality to PCB_K0402WS-v3
2026-10-29 21:52:57 +00:00
feelfree69 3df406a057 Merge pull request #728 from DrDoof/ci/size-summary
ci: show the size of the build next to main in the job summary
2026-10-29 21:55:33 +01:00
d00f a557e285a2 tools: keep the bank table aligned in a terminal
printf pads the cells, so the table lines up on the console and is
still a markdown table in the job summary.
2026-10-29 20:47:31 +01:00
d00f 49f2a156ee ci: drop the write permissions
They were added for the step that commented on the pull request. The
sizes go to the job summary now, which only needs to read the
repository.
2026-10-29 20:01:02 +01:00
d00f 0cdf029afd tools: one script for the bank sizes
bank_occupancy.sh takes the main and branch build directories as
optional arguments and prints a markdown table, so CI calls it instead
of a second script. It gains the HOME, BANK4 and stack rows, and reads
the web assets from the build directory, where html_min is now.
2026-10-29 19:47:08 +01:00
Rob Emery 3b90e85593 Merge pull request #590 from DrDoof/feat/lldp-portdesc
lldp: send the port name as the port description
2026-10-29 18:19:55 +00:00
d00f 3dd60f6b13 lldp: send the port name as the port description
A port named in the CLI or the web UI (port <n> name ...) now carries
that name in a Port Description TLV, so a neighbour sees "Uplink" next
to "Port 9". The tail of the frame is built per port, since the TLV
length differs from port to port; ports without a name send no TLV.
2026-10-29 18:45:57 +01:00
DrDoof 2cd68167fc ci: show the size of the build next to main in the job summary
The bank growth step only exported the sizes to the environment since the
comment that used them was removed, so nothing showed them any more. It now
writes a table of the code banks, XSEG, the stack left after the internal
RAM is allocated and the web assets, main against the branch, to the job
summary, which needs no write permission on the pull request.
2026-10-29 18:45:54 +01:00
Rob Emery 9a61e471ea Merge pull request #675 from andrebrait/fix/session-timeout-default
httpd: raise the default web session timeout to one hour
2026-10-29 17:27:30 +00:00
Rob Emery acf5645687 Merge pull request #739 from DrDoof/fix/sdcc-parallel-device-lib
sdcc: fix the device library race in parallel builds
2026-10-29 17:23:26 +00:00
Rob Emery 9fea7b2882 Merge pull request #599 from DrDoof/feat/lldp-sysdesc-version
lldp: add the firmware version to the system description
2026-10-29 14:20:39 +00:00
Marco02Arduino 3dbdad703c manually rebased 2026-10-29 15:18:26 +01:00
Rob Emery 30ffbf0b47 Merge pull request #588 from DrDoof/feat/lldp-tx
lldp: complete the transmitted TLVs and announce shutdown
2026-10-29 12:28:16 +00:00
Rob Emery 84cb01f67d Merge pull request #587 from DrDoof/feat/lldp-tick
lldp: time the transmit interval from the system tick
2026-10-29 12:19:10 +00:00
João Silva f9c1dd2701 Add machine files for Horaco ZX-SG4T2
Signed-off-by: João Silva <jgc3silva@gmail.com>
2026-10-29 10:59:25 +00:00
Rob Emery 1400431337 Merge pull request #575 from logicog/zoerax
doc: Add HOWTO for using firmware tracing to figure out LED configuration
2026-10-29 08:54:01 +00:00
Rob Emery 119b5ddf13 Merge pull request #743 from gnacho/i18n/es-strings-20261028
l10n: complete the Spanish translation
2026-10-29 08:26:02 +00:00
René van Dorst 231b43b264 Merge pull request #742 from vankxr/device/add-mac
Add MAC offset for GT_ST024M and YS25_0402M
2026-10-28 20:01:19 +00:00
René van Dorst e53ebddc21 Merge pull request #727 from andrebrait/fix/json-array-close
httpd: close the port arrays after their loops
2026-10-28 19:46:25 +00:00
gnacho f23eb6bebb l10n: complete the Spanish translation 2026-10-28 20:45:41 +01:00
João Silva cd51cffb1d Add MAC offset for GT_ST024M and YS25_0402M
Signed-off-by: João Silva <jgc3silva@gmail.com>
2026-10-28 19:06:55 +00:00
DrDoof 8954637bbc sdcc: fix the device library race in parallel builds
The mcs51 library target writes into ../build/$(PORT) without depending on
it, so with -j the archiver can start before the directory exists and the
toolchain build fails with

  sdar: ../build/small/mcs51.lib: No such file or directory

It is intermittent: the same tree builds fine on a retry.
2026-10-28 17:40:19 +01:00
Rob Emery 01fc5db9a3 Merge pull request #737 from DrDoof/fix/stp-port-id-panel
stp: use the front panel number as the port ID
2026-10-28 15:32:38 +00:00
DrDoof bdca888ecd stp: use the front panel number as the port ID
The port ID in the BPDUs was the chip port plus one, so on most boards
it did not match the port label, neither on the Spanning Tree page nor
on the neighbour. Send the front panel number instead, and 101 and up
for the LAGs, the same numbers the page already uses for the Port
column. A returned BPDU of our own is mapped back to the port by that
number.

Scenario 66 gives one port a front panel number that differs from its
chip port.
2026-10-28 16:05:12 +01:00
Rob Emery 8d20af475e Adding some instructions for using the sim, also improving the --help
output to be more consistent
2026-10-28 11:23:14 +00:00
Andre Brait e8431999e5 httpd: close the port arrays after their loops
send_lldp(), send_eee(), send_bandwidth(), send_storm(), send_mtu() and
send_status() wrote the closing ']' inside the loop, on the last port.
Write it once after the loop, as send_isolation() already does, so the
array is closed however the loop ends.
2026-10-28 11:08:54 +01:00
René van Dorst 7ca4d2c8dc Merge pull request #723 from zoeimogen/main
SWTG024AS-V2.1.0 support (Xikestor SKS3200-4E2X, Sodola SL902-SWTG024AS)
2026-10-28 08:09:02 +01:00
Zoe O'Connell 32dd21bbd3 Add additional information on SWTG024AS-V2.1.0 2026-10-28 00:15:26 +00:00
feelfree69 92f9025109 Merge pull request #671 from gtytup/s25g1109fp
Add Sirivision SR-S25G2109F device (PCB S25G1109FP V1.3)
2026-10-27 22:38:33 +01:00
feelfree69 b65aa82d78 Merge pull request #616 from logicog/zoerax_hg0402xg
New Device: Add support for ZoeRax HG0402XG V1.1
2026-10-27 22:36:49 +01:00
logicog 851eb39344 Merge pull request #444 from DrDoof/feat/rstp
stp: full RSTP and a reworked Spanning Tree page
2026-10-27 22:34:54 +01:00
João Silva 970e98f4c5 test/stp: pack host structs like SDCC and cover the edge recovery
Build the harness with -fpack-struct=1 and assert the frame struct sizes,
so the host reads wire bytes the way the firmware lays them out. Add
scenarios for a port that regains edge after a hold, one that heard a BPDU
and stays non-edge, auto-edge switched off, and a captured RouterOS BPDU
fed in on every port, tagged and untagged.
2026-10-27 22:11:24 +01:00
João Silva 4d009bc8e8 stp: give auto-edge back to a port held by its own BPDU
stp_loop_hold_peer() takes operEdge away from the port that sent the
BPDU we got back, though that port heard nothing itself. When the hold
ran out the port stayed non-edge until its next link change, and every
later state change on it counted as a topology change. Restore edge when
the hold ends with the port still silent and auto-edge on, before the
transition is reported, so the recovery itself is not a change. Hellos
go out on edge ports too, so a loop that persists is caught again.

The console column that shows seconds since the last BPDU is now called
age[s]; it never was a receive count.
2026-10-27 22:11:24 +01:00
d00f eb51128ec7 stp: a port without carrier does not become the root port
stp_reselect() took every port with fresh information as a candidate, so a
BPDU credited to a port whose carrier the once-a-second link poll had not
seen yet made that port the root port before the port was set up for it.
A candidate now needs its link bit as well; the poll that sees the carrier
a moment later runs the selection again. Scenario 54.
2026-10-27 22:11:24 +01:00
d00f b86fd37eaa stp: pass a topology change on only from a forwarding port
stp_in() propagated the TC flag of any BPDU that did not arrive on an
alternate port, and acknowledged and propagated a TCN from any port, so a
port still in its listen period or held discarding in a dispute could flush
the addresses of every other port and move the topology change counter.
802.1D-2004 17.31 keeps the Topology Change machine in LEARNING until the
port forwards and drops rcvdTc and rcvdTcn there. Both paths now ask for
the forwarding state first; an alternate port is discarding, so the old
check is covered by the new one.

Scenario 53 plays a TC flag and a TCN into a port that is still discarding,
and then into the same port once it forwards. Scenario 51 used a TCN on a
port one tick short of its edge transition as the trigger for the clock it
tests; it now waits for the transition.
2026-10-27 22:11:24 +01:00
d00f b92a773cad test/stp: tag the frames the simulator feeds in
The frame the simulator builds carries a vlan_tag between the RTL tag and the BPDU, but left its TPID zero. stp_in() now takes the body offset from TRAP_RX_BODY(), which reads those two bytes, so it took the untagged branch and parsed the body four bytes early. Writing 0x8100 makes the frame what its layout says it is.
2026-10-27 22:11:24 +01:00
d00f 068e7467af test/stp: stub the RMA action the trap now sets
Reception moved to the RMA trap in main, so rtl837x_stp.c calls trap_rma_set() from stp_setup() and stp_off(). The simulator defines neither, so it does not link. Linking rtl837x_trap.c instead would pull trap_init() and the register primitives it needs, which the simulator does not mock.
2026-10-27 22:11:24 +01:00
DrDoof da4f5058a7 test/stp: declarations first, one statement per line
stp_sim.c declared variables in the middle of the scenarios and put
whole loops and conditions on one line. Each block now starts with its
declarations; an initializer that depends on what happens before it
stays where it was as an assignment. Bodies of if and for are on lines
of their own, functions are separated by an empty line, and lines stay
within 120 columns. The output of stp_sim -v is unchanged.
2026-10-27 22:11:24 +01:00
DrDoof fee4f17bff test/stp: print each scenario heading once
Scenarios 4 and 7 start from the state scenario 3 leaves behind, and 38
from the one 37 leaves, and they called those scenarios for it, so the
headings of 3 and 37 showed up again in the middle of the run. The setup
of 3 and 37 now lives in functions of its own that the scenarios call.
2026-10-27 22:11:24 +01:00
DrDoof e19271fc44 test/stp: build the simulator against the firmware headers
test/stp/shim held hand-written copies of the headers the STP code
includes, and they had drifted: the uIP buffer was 600 bytes instead of
1556, struct machine had three fields, port_ingress_filter_get()
returned a plain uint8_t. The simulator now compiles rtl837x_stp.c and
rtl837x_stp_cli.c the way test/ compiles firmware sources, with the real
headers and sdcc_shim.h forced in, and with the same warnings, including
-Wno-pointer-sign for the string literals passed to cmd_compare(). It
stays on -std=c11: in gnu11 mode glibc defines LITTLE_ENDIAN, which
uip-conf.h names as the byte order, and HTONS() stops swapping. Its own
print_string() and cmd_compare() take the firmware's argument types.
2026-10-27 22:11:24 +01:00
DrDoof aff6ac0923 stp: full RSTP and a reworked Spanning Tree page
* stp: select the root port by cost and block redundant links
* stp: move the protocol to BANK4 and keep the command line in BANK2
* stp: implement the RSTP state machines of 802.1D-2004 clause 17
* stp: counters, more settings and a fuller Spanning Tree page
* stp: make a link aggregation group one port of the RSTP tree
* web: serve the Spanning Tree JSON from BANK4 as well

Kept in BANK1, the larger Spanning Tree page would leave under 1 kB
there for the rest of the web server and every page still to come, so
send_stp() and send_stp_counters() move to httpd/page_stp.c in BANK4
with the protocol, as banked calls, with their own copies of the few output
helpers and of the JSON header, so nothing in BANK4 calls into BANK1
directly or hands it a pointer into its code space. BANK4 takes the
free flash between BANK3 and the web files.

KP_9000_6XHML_X2: BANK1 44336, BANK2 36969, BANK3 11942, BANK4 20965
bytes of 49152.
2026-10-27 22:11:24 +01:00
feelfree69 6c62791d23 Merge pull request #722 from frogamic/fix-docker-oem-build
Document oem installer build in docker
2026-10-27 22:04:23 +01:00
Zoë O'Connell 3910888052 Merge branch 'logicog:main' into main 2026-10-27 17:24:37 +00:00
Zoe O'Connell a0cb3c1850 SWTG024AS-V2.1.0 2026-10-27 17:24:03 +00:00
Dominic Shelton bbce2d6727 doc: Document Docker oem installer build 2026-10-28 00:52:31 +11:00
Rob Emery f22bf9cf82 The firmware never displays vlan 0, we shouldn't either 2026-10-27 07:45:30 +00:00
Andre Brait bed80a3472 httpd: raise the default web session timeout to one hour
200 seconds was too short in practice: the UI stops polling while its
tab is hidden, so looking at another tab for a few minutes ended the
session. Make it 3600 seconds; "session <seconds>" still overrides it.
2026-10-26 22:18:39 +01:00
Rob Emery 3694363001 Adding missing name 2026-10-25 15:41:12 +00:00
Rob Emery 511aebf085 If the handler doesn't return anything we need to handle that 2026-10-25 09:07:14 +00:00
Rob Emery 2168ad555e We now show the same number of ports on all pages 2026-10-25 09:07:14 +00:00
Rob Emery 9dbf0f40f2 Harmonising on the machine_config structure so we can
handle both with and without configuration file consistently
2026-10-25 09:07:14 +00:00
Rob Emery 183f6f7135 We need to parse both the .c and .h file, so now you can specify
either and it'll sort it out. adding --verbose for debugging
2026-10-25 09:07:14 +00:00
Rob Emery 4dee3d2ad2 Driving responses to be based on number of ports in machine
configuration
2026-10-25 09:07:14 +00:00
Rob Emery 77fc545c6a Adding hardcoded responses for "dns" and "ntp" commands 2026-10-25 09:07:14 +00:00
Rob Emery 29542a5414 Hardcoded responses for the remaining endpoints that are duplicated
from my Hi-Source HI-k0801WS
2026-10-25 09:07:14 +00:00
Rob Emery 421e1f0c7d The state of the tagged/untagged ports in the vlan is complete with
every command, so we need to start from empty each time
2026-10-25 09:07:14 +00:00
Rob Emery 813d7e7ae2 Reintroducing argument parsing that I somehow lost rebasing 2026-10-25 09:07:14 +00:00
Rob Emery 9088e73acb Updating to mirror new macro structure used in #684 2026-10-25 09:07:14 +00:00
Rob Emery 2ecef98263 Updating to support \n separated commands, might need to support \r\n
as well, but this'll do for now
2026-10-25 09:07:14 +00:00
Rob Emery 8bd9231432 Adding support for renaming vlan 2026-10-25 09:07:14 +00:00
Rob Emery 16d61857b7 Handling "vlan 2" 2026-10-25 09:07:14 +00:00
Rob Emery 4ad0b7fd3d Implementing removal of vlan 2026-10-25 09:07:14 +00:00
Rob Emery 7694f1a625 Adding management vlan state 2026-10-25 09:07:14 +00:00
Rob Emery 69dd977708 Add support for setting pvid to non existant vlans 2026-10-25 09:07:14 +00:00
Rob Emery e83ff4d095 Renaming to _api for anything that is called from the http handler
to help seperate out the parsers that'll be coming in for cmd
putting all state under one global and implementing something resembling
vlan parsing
2026-10-25 09:07:14 +00:00
Rob Emery a03b2259ef Porting to python so it's easier to implement a full
switch-emulator with state
2026-10-25 09:07:14 +00:00
gtytup ec14dbf323 doc: add Sirivision SR-S25G2109F (S25G1109FP V1.3)
Device page following doc/adding-a-device.md: label data, PCB versus label
naming, CPU identified with 'regget 4' (RTL8373, non-N), separate PHY and flash
identification, build target, PCB silkscreen, port mapping, board signals, front
panel and LED configuration, reset button, MAC location, what works and what is
unverified, plus photos.  Row added to supported_devices.md.
2026-10-25 15:37:28 +08:00
gtytup deedb92c5d machine: add Sirivision S25G1109FP V1.3 (8x2.5G + 1xSFP+)
RTL8373 (non-N) with an RTL8224 quad 2.5G PHY, 2 MB GD25Q16ESIG flash, no PoE.
The wiring is close to the KP-9000-9XHML-X V3.1 (same 8+1 topology, same I2C on
GPIO39/40), but three things differ and were determined on hardware:

- ModAbs is GPIO30 (low with a module inserted, high with an empty cage) and LOS
  is GPIO37 (high without light), not GPIO38.  GPIO38, the ModAbs pin of the
  KP-9000 reference, is tied low on this board, which made the firmware believe a
  module was permanently inserted and retry the I2C read forever.
- The reset button is GPIO54, not GPIO48.  GPIO48 never changes here, so the
  button appeared to do nothing.
- The LED wiring follows the stock port order (pin 3n+m belongs to port n+1,
  LED function m), so the mux table is the chip default except that pin 25 --
  the SFP LED -- is driven by function 0, the only populated function in SET1.
  Per copper port the left LED shows link/activity and the right LED shows
  2.5G, matching the front panel labels.

Verified on hardware: all eight 2.5G ports at 10/100/1000/2500 Mbps, 1G and 10G
SFP modules including DDM data, both LED columns, module insert/remove and the
reset button.
2026-10-25 15:37:28 +08:00
logicog c263a8ab64 Add assmebler injection script 2026-10-15 06:53:23 +02:00
d00f bf77a7f1c5 lldp: time the transmit interval from the system tick
lldp_tick counted main-loop passes, so the 6000 meant for 30 s at
SYS_TICK_HZ ran at whatever rate the loop happened to have, and the
interval moved with httpd and SFP load. Step once per second from the
tick counter like the STP timers do, count seconds to the interval and
derive the TTL from it with the 802.1AB hold multiplier of 4.
2026-10-14 13:06:02 +02:00
d00f ea79fa018f lldp: add the firmware version to the system description
The System Description TLV carried the model name alone, so an
inventory built from LLDP could not tell which firmware a switch runs.
Append the version string, as in "SWTGW218AS 8+1 Managed Switch
v0.1.0-1856aeba".
2026-10-13 05:19:28 +02:00
d00f 12b85025e3 lldp: announce shutdown with a TTL of 0
lldp off and port <n> lldp block went silent and left the neighbour
holding our entry until its TTL ran out, 120 s later. Send one LLDPDU
with a TTL of 0 on the ports that stop, the shutdown form 802.1AB
defines for this, before the transmit mask changes.
2026-10-13 04:00:32 +02:00
d00f 0e2d940765 lldp: advertise system capabilities and the management address
Neighbours could not tell a bridge from a host and had no address to
reach us on. Add the System Capabilities TLV (bridge, enabled) and a
Management Address TLV with the IPv4 address, left out while the
address is still 0.0.0.0. Size the payload buffer for the frame it can
now hold: 64 bytes did not cover a 23 character hostname next to the
longer model names.
2026-10-13 04:00:17 +02:00
d00f 677536dd74 lldp: send the port id as an interface name
The Port ID TLV carried a single digit with the locally assigned
subtype, so a neighbour listed us as port "3". Send "Port 3" with the
interface name subtype instead, the form the port keeps in the CLI and
the web UI.
2026-10-13 04:00:17 +02:00
logicog c02f660c08 doc: Add HOWTO for using firmware tracing to figure LED configuration
This adds a howto for figuring out LED configuration via tracing
of functions in the originam firmware image. The method also provides
information on PHY and SDS configuration, including PHY patches.
2026-10-11 22:31:33 +02:00
384 changed files with 12889 additions and 3975 deletions

No files matched your search

+5 -10
View File
@@ -7,8 +7,6 @@ on:
permissions:
contents: read
pull-requests: write
issues: write
jobs:
build:
@@ -40,19 +38,16 @@ jobs:
- name: Check that every machine definition can be compiled
run: cd branch && make machine_check
- name: Make project (4x2/RTL8372)
run: cd branch && make CI=1 MACHINE="KP_9000_6XHML_X2" && cp output/KP_9000_6XHML_X2/rtlplayground.map /tmp/branch.map
run: mkdir -p /tmp/branch /tmp/main && cd branch && make CI=1 MACHINE="KEEPLINK_KP_9000_6XHML_X2" && cp -r output/KEEPLINK_KP_9000_6XHML_X2/rtlplayground.map output/KEEPLINK_KP_9000_6XHML_X2/rtlplayground.mem output/KEEPLINK_KP_9000_6XHML_X2/html_min /tmp/branch/
- name: Make project (8x1/RTL8373)
run: cd branch && make CI=1 MACHINE="KP_9000_9XHML_X_V3_1"
run: cd branch && make CI=1 MACHINE="KEEPLINK_KP_9000_9XHML_X_V3_1"
- name: Make project with the health instrumentation
run: cd branch && make clean && make CI=1 MACHINE="KP_9000_6XHML_X2" HEALTH=1
run: cd branch && make clean && make CI=1 MACHINE="KEEPLINK_KP_9000_6XHML_X2" HEALTH=1
- name: Make main
run: |
ln -s ../branch/toolchain main/toolchain
PATH="$(echo "$PWD"/branch/toolchain/sdcc-*/bin):$PATH"
cd main && make CI=1 MACHINE="KP_9000_6XHML_X2" && cp output/KP_9000_6XHML_X2/rtlplayground.map /tmp/main.map
cd main && make CI=1 MACHINE="KEEPLINK_KP_9000_6XHML_X2" && cp -r output/KEEPLINK_KP_9000_6XHML_X2/rtlplayground.map output/KEEPLINK_KP_9000_6XHML_X2/rtlplayground.mem output/KEEPLINK_KP_9000_6XHML_X2/html_min /tmp/main/
- name: Calculate bank growth
run: |
sed -rn 's/^([XCD]SEG|(BANK[0-9])).*=\s+([0-9]+)\. bytes.*$/MAIN_\1=\3/p' /tmp/main.map | sort -u >> "$GITHUB_ENV"
sed -rn 's/^([XCD]SEG|(BANK[0-9])).*=\s+([0-9]+)\. bytes.*$/BRANCH_\1=\3/p' /tmp/branch.map | sort -u >> "$GITHUB_ENV"
du -sb main/output/KP_9000_6XHML_X2/html_min | awk '{print "MAIN_WEB="$1}' >> "$GITHUB_ENV"
du -sb branch/output/KP_9000_6XHML_X2/html_min | awk '{print "BRANCH_WEB="$1}' >>"$GITHUB_ENV"
bash branch/tools/bank_occupancy.sh KP_9000_6XHML_X2 /tmp/main /tmp/branch >> "$GITHUB_STEP_SUMMARY"
+5
View File
@@ -23,6 +23,11 @@
## Changed
- Web UI
- The web session expires after one hour without a request (was 200 seconds). The UI stops
polling while its tab is hidden, so with 200 seconds switching tabs for a few minutes logged
you out. `session <seconds>` still sets it.
## Fixed
- Time
+8 -5
View File
@@ -150,10 +150,12 @@ SRCS += \
rtl837x_lldp.c \
rtl837x_storm.c \
rtl837x_lacp.c \
rtl837x_trap.c
rtl837x_trap.c \
rtl837x_stp_cli.c
SRCS += \
httpd/httpd.c \
httpd/page_impl.c
httpd/page_impl.c \
httpd/page_stp.c
SRCS += \
uip/timer.c \
uip/uip.c \
@@ -165,7 +167,7 @@ SRCS += \
OBJS = ${SRCS:%.c=$(BUILDDIR)/%.rel}
DEPS := ${SRCS:%.c=$(BUILDDIR)/%.d}
HTML := $(shell find html -name '*.js' -or -name '*.html' -or -name '*.svg' -or -name '*.css' -or -name '*.ico')
HTML := $(shell find html -name '*.html' -or -name '*.svg' -or -name '*.css' -or -name '*.ico')
# Minified copy of the web UI sources, used as the fileadder input.
# The raw html/ sources stay untouched for development; the minified
@@ -181,10 +183,11 @@ $(HTML_MIN_LIST): FORCE
@echo $(sort $(HTML)) > $@.tmp
@cmp -s $@.tmp $@ && rm -f $@.tmp || mv $@.tmp $@
$(HTML_MIN_STAMP): $(HTML) $(HTML_MIN_LIST) tools/minify.py $(if $(wildcard $(HTML_MIN)),,FORCE)
$(HTML_MIN_STAMP): $(HTML) html/app.js $(HTML_MIN_LIST) tools/minify.py tools/rjsmin.py $(if $(wildcard $(HTML_MIN)),,FORCE)
rm -rf $(HTML_MIN)
mkdir -p $(HTML_MIN)
@for f in $(HTML); do python3 tools/minify.py $$f $(HTML_MIN)/$$(basename $$f) || exit 1; done
python3 tools/rjsmin.py < html/app.js > $(HTML_MIN)/app.js || exit 1
@touch $@
html_data.c html_data.h &: $(HTML_MIN_STAMP) | tools
@@ -246,7 +249,7 @@ $(BUILDDIR)/%.rel: %.asm $(CCFLAGS_STAMP) | create_build_dir
# mv -f $(addprefix $(basename $^), .lst .rel .sym) .
$(BUILDDIR)/rtlplayground.ihx: $(OBJS) $(BUILDDIR)/crtbank.rel $(BUILDDIR)/crc16.rel
$(CC) $(CC_FLAGS) --xram-size 49151 -Wl-bHOME=0x00000 -Wl-bBANK1=0x14000 -Wl-bBANK2=0x24000 -Wl-bBANK3=0x34000 -Wl-r -o $@ $^
$(CC) $(CC_FLAGS) --xram-size 49151 -Wl-bHOME=0x00000 -Wl-bBANK1=0x14000 -Wl-bBANK2=0x24000 -Wl-bBANK3=0x34000 -Wl-bBANK4=0x44000 -Wl-r -o $@ $^
$(BUILDDIR)/rtlplayground.img: $(BUILDDIR)/rtlplayground.ihx
objcopy --input-target=ihex -O binary $< $@
+37 -5
View File
@@ -97,17 +97,25 @@ docker run --rm -v $(pwd):/workspace rtlplayground-dev make MACHINE=DEFAULT_8C_1
The resulting `.bin` file appears in `output/` on your host.
Build the OEM web upgrade bin (after building the firmware bin)
```
docker run --rm -v $(pwd):/workspace rtlplayground-dev make -C installer
```
The resulting `rtlplayground_oem_upgrade.bin` file appears in `installer/output/` on your host.
Build host tools only:
```
docker run --rm -v $(pwd):/workspace rtlplayground-dev make -C tools
```
Run the web-interface simulator locally:
Run the web-interface simulator through docker:
```
docker run --rm -p 8080:8080 -v $(pwd):/workspace rtlplayground-dev \
tools/output/httpd_sim /workspace/html
docker run --rm -p 8081:8081 -v $(pwd):/workspace rtlplayground-dev \
tools/output/httpd_sim.py /workspace/html
```
Edit `config.txt` on your host, then re-run `make` — the
@@ -363,13 +371,37 @@ netmask zzz.zzz.zzz.zzz = Network mask of the switch
port x name xxx = Name xxx the port number x
port z 1g = Set 1g speed for port z
igmp on/off = Turn IGMP on or off
session xxxx = Web session timeout in seconds (default 200)
session xxxx = Web session timeout in seconds (default 3600)
```
[To be continue]
Enjoy playing!
## (11) Other documents
## (13) HTTP Simulator for front-end development
The simulator is available in tools as `./httpd_sim.py`
By default it will serve the content in the current working directory so the easiest way to run this is to:
```
cd ./html
../tools/httpd_sim.py
```
And the simulator will be available on http://127.0.0.1:8081
There are commandline options available:
```
usage: httpd_sim.py [-h] [--machine MACHINE] [--port PORT] [--bindaddr BINDADDR] [--verbose]
options:
-h, --help show this help message and exit
--machine MACHINE path to machine.c or .h file to parse (optional)
--port PORT port to bind to (default 8081)
--bindaddr BINDADDR address to bind (default 127.0.0.1)
--verbose enable verbose output
```
The machine parsing is somewhat experimental.
## (12) Other documents
The following documents give further documentation on specific features of the RTL837x SoCs:
- [Adding a new device](doc/adding-a-device.md)
+8
View File
@@ -945,6 +945,8 @@ void parse_port(void)
print_string("\"\n");
} else if (cmd_compare(2, "lldp")) {
if (cmd_compare(3, "block")){
if (lldp_enabled)
lldp_shutdown((uint16_t)1 << phy_settings.port);
lldp_logical_port_status &= ~((uint16_t)1 << phy_settings.port);
} else if (cmd_compare(3, "permit")) {
lldp_logical_port_status |= (uint16_t)1 << phy_settings.port;
@@ -1870,6 +1872,10 @@ void cmd_parser(void) __banked
if (cmd_compare(0, "reset")) {
print_string("\nRESET\n\n");
reset_chip();
} else if (cmd_compare(0, "factory-reset")) {
print_string("\nFACTORY RESET\n\n");
flash_default_config();
reset_chip();
} else if (cmd_compare(0, "sfp")) {
parse_sfp();
} else if (cmd_compare(0, "stat")) {
@@ -2089,6 +2095,8 @@ void cmd_parser(void) __banked
trap_rma_set(RTL837X_RMA0E_CONF, RTL837X_RMA_ACT_TRAP);
} else {
print_string("LLDP disabled\n");
if (lldp_enabled)
lldp_shutdown(lldp_logical_port_status);
lldp_enabled = 0;
trap_rma_set(RTL837X_RMA0E_CONF, RTL837X_RMA_ACT_FORWARD);
}
@@ -26,11 +26,11 @@ Manufacturer information be found [on the product page](https://www.trendnet.com
Top side
<img src="photos/TEG-S562/TEG-S562-v1.0R-top.jpg" width="300" />
<img src="photos/270-NB1-MS206B004A1-REV.A1/TEG-S562-v1.0R-top.jpg" width="300" />
Bottom
<img src="photos/TEG-S562/TEG-S562-v1.0R-bottom.jpg" width="300" />
<img src="photos/270-NB1-MS206B004A1-REV.A1/TEG-S562-v1.0R-bottom.jpg" width="300" />
## Connectors
+3 -3
View File
@@ -167,9 +167,9 @@ each cage - the left cage reports `sds_config sds: 01` and the right cage
### Machine target
Build for this device with `make MACHINE=2G5F4_10G2_V1_01`, which selects the
`machine/2G5F4_10G2_V1_01.c` board definition. It is derived from
`machine/KP_9000_6XHML_X2.c` with the SFP cage order and the reset pin changed.
Build for this device with `make MACHINE=HONGYAVISION_HYWS_SGT0204S`, which selects the
`machine/HONGYAVISION_HYWS_SGT0204S.c` board definition. It is derived from
`machine/KEEPLINK_KP_9000_6XHML_X2.c` with the SFP cage order and the reset pin changed.
The fitted T25S40 cannot be read in DIO mode on this board: an image that leaves
DIO enabled does not come up at all, both at the default read clock divider of 4
and at 8 (two boards tested), while the same image with single-IO boots and runs
@@ -32,15 +32,15 @@ Stock flash chip is 512KB in size. Consider replacing for update through Web UI.
Top side
<img src="photos/HYWS-SGT0108S-unmanaged\Assembled-top.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/Assembled-top.jpg" width="300" />
Front
<img src="photos/HYWS-SGT0108S-unmanaged\Assembled-front.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/Assembled-front.jpg" width="300" />
Bottom
<img src="photos/HYWS-SGT0108S-unmanaged\Assembled-bottom.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/Assembled-bottom.jpg" width="300" />
### PCB overview
@@ -49,15 +49,15 @@ Bottom
Top side
<img src="photos/HYWS-SGT0108S-unmanaged\PCB-top.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/PCB-top.jpg" width="300" />
Bottom
<img src="photos/HYWS-SGT0108S-unmanaged\PCB-bot.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/PCB-bot.jpg" width="300" />
Original SPI Flash Chip
<img src="photos/HYWS-SGT0108S-unmanaged\og_spi_flash.jpg" width="300" />
<img src="photos/2G5F_20G_V1.01/og_spi_flash.jpg" width="300" />
## Power supply
@@ -7,7 +7,7 @@
## PCB
<img src="photos/2M-PCB23-V2.2-managed/2M-PCB23-V2.2-top.jpg" width="300" />
<img src="photos/2M-PCB23-V2.2/2M-PCB23-V2.2-top.jpg" width="300" />
## Port overview
@@ -7,7 +7,7 @@
## PCB
<img src="photos/2M-PCB23-V3.1-managed/2M-PCB23-V3.1-top.jpeg" width="300" />
<img src="photos/2M-PCB23-V3.1/2M-PCB23-V3.1-top.jpeg" width="300" />
## Port overview
@@ -10,14 +10,14 @@ The original web interface reports this board as hardware version V3.2
## PCB
<img src="photos/2M-PCB23-V3.2-managed/2M-PCB23-V3.2-top.jpeg" width="300" />
<img src="photos/2M-PCB23-V3.2/2M-PCB23-V3.2-top.jpeg" width="300" />
## Compared to V3.1
The component placement matches [2M-PCB23-V3.1](2M-PCB23-V3_1.md): same
The component placement matches [2M-PCB23-V3.1](2M-PCB23-V3.1.md): same
positions for the flash (U8), the T7/T8/T9/T10 headers, the SFP cage and its
LED, and the unpopulated U7/U9 footprints. Build with
`make MACHINE=KP_9000_9XHML_X_V3_2`, whose board file is a symlink to the V3.1
`make MACHINE=KEEPLINK_KP_9000_9XHML_X_V3_2`, whose board file is a symlink to the V3.1
definition and only differs in the reported name.
## Tested
+5 -5
View File
@@ -15,17 +15,17 @@ and sold by Mokerlink.
The device is fully supported:
- All 4 2.5GBASE-T RJ45 ports work at 10/100/1000/2500 Mbps
- The SFP+ port supports 1G, 2.5G and 10G modules
- LEDs work with the same indiciations as the OEM firmware (build with `make MACHINE=KP_9000_6XHML_X2_V1_1` if building yourself, or use the corresponding pre-compiled binary)
- LEDs work with the same indiciations as the OEM firmware (build with `make MACHINE=MOKERLINK_2G040210GSM` if building yourself, or use the corresponding pre-compiled binary)
- untested due to missing Hardware: SFP+ ports equipped with 1G or 2.5G SFPs.
### Hardware overview
Front
<img src="photos/2M-PCB43-V1.1-managed/2M-PCB43-V1.1-front.jpeg" width="300" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-front.jpeg" width="300" />
Label
<img src="photos/2M-PCB43-V1.1-managed/2M-PCB43-V1.1-label.jpeg" width="300" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-label.jpeg" width="300" />
### PCB overview
@@ -34,11 +34,11 @@ Label
Top side
<img src="photos/2M-PCB43-V1.1-managed/2M-PCB43-V1.1-top.jpeg" width="300" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-top.jpeg" width="300" />
Bottom
<img src="photos/2M-PCB43-V1.1-managed/2M-PCB43-V1.1-bottom.jpeg" width="300" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-bottom.jpeg" width="300" />
### J1, serial console
@@ -22,9 +22,9 @@ reliable indicator of PCB wiring. The PCB revision defines the hardware layout.
| PCB silkscreen | Known labels / devices | Recommended machine target | Equivalent target | Legacy target |
| --- | --- | --- | --- | --- |
| `2M-PCB43-V1.1` | Mokerlink 2G040210GSM web-managed 4+2 switch | `MACHINE_KP_9000_6XHML_X2_V1_1` | `MACHINE_KP_9000_6XH_X2_V1_1` | `MACHINE_KP_9000_6XHML_X2` |
| `2M-PCB43-V1.2` | `KP-9000-6XHML-X2` | `MACHINE_KP_9000_6XHML_X2_V1_2` | `MACHINE_KP_9000_6XH_X2_V1_2` | `MACHINE_KP_9000_6XHML_X2` |
| `2M-PCB43-V2.1` | `KP-9000-6XH-X2`, `KP-9000-6XHML-X2` | `MACHINE_KP_9000_6XH_X2_V2_1` or `MACHINE_KP_9000_6XHML_X2_V2_1` | same V2.1 layout | `MACHINE_KP_9000_6XH_X2` |
| `2M-PCB43-V1.1` | Mokerlink 2G040210GSM web-managed 4+2 switch | `MACHINE_MOKERLINK_2G040210GSM` | `MACHINE_KEEPLINK_KP_9000_6XH_V1_1` | `MACHINE_KEEPLINK_KP_9000_6XHML_X2` |
| `2M-PCB43-V1.2` | `KP-9000-6XHML-X2` | `MACHINE_KEEPLINK_KP_9000_6XHML_V1_2` | `MACHINE_KEEPLINK_KP_9000_6XH_V1_2` | `MACHINE_KEEPLINK_KP_9000_6XHML_X2` |
| `2M-PCB43-V2.1` | `KP-9000-6XH-X2`, `KP-9000-6XHML-X2` | `MACHINE_KEEPLINK_KP_9000_6XH_X2_V2_1` or `MACHINE_KEEPLINK_KP_9000_6XHML_V2_1` | same V2.1 layout | `MACHINE_KEEPLINK_KP_9000_6XH_X2` |
The V1.1 and V1.2 boards currently use the same V1.x GPIO, SFP, port and LED
layout. The V2.1 board uses a different V2.1 layout with custom LED muxing.
@@ -42,11 +42,11 @@ new builds should prefer the explicit PCB-revision targets.
Front side:
<img src="photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-front.jpg" width="600" />
<img src="photos/2M-PCB43-V2.1/KP-9000-6XH-X2-front.jpg" width="600" />
Label:
<img src="photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-label.jpg" width="600" />
<img src="photos/2M-PCB43-V2.1/KP-9000-6XH-X2-label.jpg" width="600" />
@@ -57,11 +57,11 @@ Label:
Top side
<img src="photos/2M-PCB43-V2.1-unmanaged/2M-PCB43-V2.1-top.jpg" width="600" />
<img src="photos/2M-PCB43-V2.1/2M-PCB43-V2.1-top.jpg" width="600" />
Bottom
<img src="photos/2M-PCB43-V2.1-unmanaged/2M-PCB43-V2.1-bottom.jpg" width="600" />
<img src="photos/2M-PCB43-V2.1/2M-PCB43-V2.1-bottom.jpg" width="600" />
### Hardware overview: 2M-PCB43-V1.1 / V1.2
@@ -71,15 +71,15 @@ Both use the same V1.x layout.
Label:
<img src="photos/KP-9000-6XHML-X2/label.jpg" width="600" />
<img src="photos/2M-PCB43-V2.1/KP-9000-6XH-X2-label.jpg" width="600" />
Top side:
<img src="photos/KP-9000-6XHML-X2/pcb_top.jpg" width="600" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-top.jpeg" width="600" />
Bottom:
<img src="photos/KP-9000-6XHML-X2/pcb_bottom.jpg" width="600" />
<img src="photos/2M-PCB43-V1.1/2M-PCB43-V1.1-bottom.jpeg" width="600" />
## Reset Button
@@ -12,11 +12,11 @@ The`KP-9000-9XHP-X` is the KeepLink rebrand for same product.
## Hardware overview
Front
<img src="photos/POE-2G080110GS/POE-2G080110GS-front.jpg" width="300" />
<img src="photos/2M-PCB51-ML-V1.1/POE-2G080110GS-front.jpg" width="300" />
Label
<img src="photos/POE-2G080110GS/POE-2G080110GS-label.jpg" width="300" />
<img src="photos/2M-PCB51-ML-V1.1/POE-2G080110GS-label.jpg" width="300" />
The stock firmware from a POE-2G080110GS device had a sha256sum of `4c280853465eaad80e1772075c0f2d29c11fb8c561547f06353d3a5443c388e9`.
@@ -24,11 +24,11 @@ The stock firmware from a POE-2G080110GS device had a sha256sum of `4c280853465e
Top silkscreen is marked `2M-PCB51-ML-V1.1`. PoE is provided by RTL8238C. Flash chip is 4 MB Winbond 25Q32JV (U8).
<img src="photos/POE-2G080110GS/POE-2G080110GS-pcb.jpg" width="300" />
<img src="photos/2M-PCB51-ML-V1.1/POE-2G080110GS-pcb.jpg" width="300" />
> [!CAUTION]
> This device operates on mains voltage, which can be a dangerous or potentially lethal hazard. Even after the device is unplugged, high-voltage capacitors can remain charged afterward and may still shock you. Do not attempt to open/disassemble a mains powered device unless you understand how to do so safely. Also, opening the device may void your warranty.
## Notes
The stock firmware blinks both the 2.5G and 1G LEDs on activity, despite the front of the device indicating that each LED should be independent. The `POE_2G080110GS` machine config behaves as the front of the device indicates (and what seems more logical) -- each port LED turns on and blinks independently.
The stock firmware blinks both the 2.5G and 1G LEDs on activity, despite the front of the device indicating that each LED should be independent. The `MOKERLINK_POE_2G080110GS` machine config behaves as the front of the device indicates (and what seems more logical) -- each port LED turns on and blinks independently.
@@ -27,7 +27,7 @@ Documentation for the unmanaged 8 + 1 switch sold as `7018-2.5G` by Guangnianwei
### Build target
```
make MACHINE=F7008_2_5
make MACHINE=GUANGNIANWEI_7018_2_5G
```
### LED wiring
@@ -57,11 +57,11 @@ The board is marked `F7008-2.5GPOE-V1.2`.
Top side:
<img src="photos/F7008-2.5/PCB-top.jpg" width="600" />
<img src="photos/F7008-2.5GPOE-V1.2/PCB-top.jpg" width="600" />
Bottom side:
<img src="photos/F7008-2.5/PCB-bottom.jpg" width="600" />
<img src="photos/F7008-2.5GPOE-V1.2/PCB-bottom.jpg" width="600" />
### Hardware notes
@@ -12,12 +12,12 @@
- **Ports**:
- 4 × RJ45: 10/100/1000/2500 Mbps
- 2 × SFP+: 1000 / 2500 / 10000 Mbps
<img src="photos/HG0402XG_V1_1/HG0402XG_V1_1_bottom.jpg" width="300" />
<img src="photos/HG0402XG-V1.1/ZOERAX_HG0402XG_V1_1_bottom.jpg" width="300" />
## PCB
<img src="photos/HG0402XG_V1_1/HG0402XG_V1_1_top.jpg" width="300" />
<img src="photos/HG0402XG_V1_1/HG0402XG_V1_1_bottom.jpg" width="300" />
<img src="photos/HG0402XG-V1.1/ZOERAX_HG0402XG_V1_1_top.jpg" width="300" />
<img src="photos/HG0402XG-V1.1/ZOERAX_HG0402XG_V1_1_bottom.jpg" width="300" />
Be aware that the UART header is metric, the pitch is 2mm. The JST PH2.0mm header shown was addeded after purchase
@@ -18,13 +18,13 @@ ONT-S207CW-62TS-SE, Binardat 2G06-04210GSM (managed), and Binardat 2G06-04210GS
### Binardat 2G06-04210GSM
**Front View:**
<img src="photos/ONT-S207CW-Binardat-2G06-04210GSM/binardat-2g06-04210gsm-front.jpg" width="400" />
<img src="photos/NONAME-20240111/binardat-2g06-04210gsm-front.jpg" width="400" />
**Back View:**
<img src="photos/ONT-S207CW-Binardat-2G06-04210GSM/binardat-2g06-04210gsm-back.jpg" width="400" />
<img src="photos/NONAME-20240111/binardat-2g06-04210gsm-back.jpg" width="400" />
**PCB View:**
<img src="photos/ONT-S207CW-Binardat-2G06-04210GSM/binardat-2g06-04210gsm-pcb.jpg" width="400" />
<img src="photos/NONAME-20240111/binardat-2g06-04210gsm-pcb.jpg" width="400" />
*Photos courtesy of [andreas5232](https://github.com/andreas5232) from [emesix/ONT-S207CW-62TS-SE#1](https://github.com/emesix/ONT-S207CW-62TS-SE/issues/1)*
@@ -26,7 +26,7 @@ Using SPI clamp in-board is the only method for initial installation.
Top side
<img src="photos/STEAMEMO_IG204_V1/PCB-top.jpg" width="600" />
<img src="photos/PB-2131/PCB-top.jpg" width="600" />
### Connectors
### T7, serial console
@@ -17,7 +17,7 @@ PHY 2x RTL8261BE
- 2 x RJ45: 10/100/1000/2500/5000/10000 Mbps
- **Power**: 12V DC, 2A barrel connector
<img src="photos/ZX310S-4T2XT/label.jpg" width="300" />
<img src="photos/PCB-310S-4T2XT-V1.0.0_22273/label.jpg" width="300" />
### What works
The device is fully supported:
@@ -28,15 +28,15 @@ The device is fully supported:
### PCB overview
**Board markings**
- Top silkscreen: PCB-SL310S-4T2XT-V1.0.0-22273
- Top silkscreen: PCB-310S-4T2XT-V1.0.0_22273
Top side
<img src="photos/ZX310S-4T2XT/pcb_top.jpg" width="300" />
<img src="photos/PCB-310S-4T2XT-V1.0.0_22273/pcb_top.jpg" width="300" />
Bottom
<img src="photos/ZX310S-4T2XT/pcb_bottom.jpg" width="300" />
<img src="photos/PCB-310S-4T2XT-V1.0.0_22273/pcb_bottom.jpg" width="300" />
### J1, serial console
@@ -25,21 +25,21 @@ RTL8373-based 8×2.5G PoE + 1×10G SFP+ web-managed switch, sold as the
Front panel:
<img src="photos/PCB-AFGW_SWTG218ANS_V2.0.2/device_front.jpg" width="800" />
<img src="photos/PCB-AFGW-SWTG218ANS_V2.0.2_23308/device_front.jpg" width="800" />
Board mounted in the case, with the internal PSU above it:
<img src="photos/PCB-AFGW_SWTG218ANS_V2.0.2/dev_top_w_pcb.jpg" width="800" />
<img src="photos/PCB-AFGW-SWTG218ANS_V2.0.2_23308/dev_top_w_pcb.jpg" width="800" />
### PCB overview
Top side:
<img src="photos/PCB-AFGW_SWTG218ANS_V2.0.2/pcb_front.jpg" width="800" />
<img src="photos/PCB-AFGW-SWTG218ANS_V2.0.2_23308/pcb_front.jpg" width="800" />
Bottom side:
<img src="photos/PCB-AFGW_SWTG218ANS_V2.0.2/pcb_back.jpg" width="800" />
<img src="photos/PCB-AFGW-SWTG218ANS_V2.0.2_23308/pcb_back.jpg" width="800" />
A 4-pad UART header with `RXD` / `TXD` silkscreened sits next to the right heatsink.
@@ -30,11 +30,11 @@ Using SPI clamp in-board is the only method for initial installation.
Front panel
<img src="photos/FNS-1200P/chassis-front.jpg" width="400" />
<img src="photos/PCB-K0402W-U13-V2.0/chassis-front.jpg" width="400" />
Top side (PCB)
<img src="photos/FNS-1200P/PCB-top.jpg" width="300" />
<img src="photos/PCB-K0402W-U13-V2.0/PCB-top.jpg" width="300" />
### Port layout
@@ -6,7 +6,7 @@ The board does have footprints for a VLAN modeswitch at the front and a second f
### Brands
* YuanLey YS25-0402 <sup><sub>Note: there are [multiple revisions](PCB-K0402WS-V3.0.md) of the YS25-0402. This first revision lacks the "Vlan" switch cutout on the front of the enclosure.</sub></sup>
* YuanLey YS25-0402 <sup><sub>Note: there are [multiple revisions](PCB-K0402W-V3.0.md) of the YS25-0402. This first revision lacks the "Vlan" switch cutout on the front of the enclosure.</sub></sup>
### Programming
@@ -14,7 +14,7 @@ Use a SOIC-8 clamp to the flash chip (U1 on silkscreen) at the top of the board,
The board has been seen to ship with a single [BoyaMicro BY25Q16BSSIG](https://www.lcsc.com/datasheet/C382744.pdf) 16Mbit (2MiB) chip, though exact BOM may vary.
<a href="photos/PCB-K0402WS-V1.0/flash.jpg"><img src="photos/PCB-K0402WS-V1.0/flash.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/flash.jpg"><img src="photos/PCB-K0402W-V1.0/flash.jpg" width="300" /></a>
### What works
@@ -33,19 +33,19 @@ The board has been seen to ship with a single [BoyaMicro BY25Q16BSSIG](https://w
Front panel
<a href="photos/PCB-K0402WS-V1.0/ports.jpg"><img src="photos/PCB-K0402WS-V1.0/ports.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/ports.jpg"><img src="photos/PCB-K0402W-V1.0/ports.jpg" width="300" /></a>
PCB top
<a href="photos/PCB-K0402WS-V1.0/pcb-top.jpg"><img src="photos/PCB-K0402WS-V1.0/pcb-top.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/pcb-top.jpg"><img src="photos/PCB-K0402W-V1.0/pcb-top.jpg" width="300" /></a>
PCB bottom
<a href="photos/PCB-K0402WS-V1.0/pcb-bottom.jpg"><img src="photos/PCB-K0402WS-V1.0/pcb-bottom.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/pcb-bottom.jpg"><img src="photos/PCB-K0402W-V1.0/pcb-bottom.jpg" width="300" /></a>
Bottom and rear
<a href="photos/PCB-K0402WS-V1.0/bottom.jpg"><img src="photos/PCB-K0402WS-V1.0/bottom.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/bottom.jpg"><img src="photos/PCB-K0402W-V1.0/bottom.jpg" width="300" /></a>
### Power supply
@@ -69,4 +69,4 @@ Standard 0.1" / 2.54mm pin headers will not fit, so wires or clips may be used i
The image below shows some oversized clips clumsily attached.
<a href="photos/PCB-K0402WS-V1.0/uart.jpg"><img src="photos/PCB-K0402WS-V1.0/uart.jpg" width="300" /></a>
<a href="photos/PCB-K0402W-V1.0/uart.jpg"><img src="photos/PCB-K0402W-V1.0/uart.jpg" width="300" /></a>
@@ -30,15 +30,15 @@ Using SPI clamp in-board is the only method for initial installation.
Front panel
<img src="photos/PCB-K0402WS-V2.0/chassis-front.jpg" width="400" />
<img src="photos/PCB-K0402W-V2.0/chassis-front.jpg" width="400" />
Bottom label
<img src="photos/PCB-K0402WS-V2.0/chassis-bottom.jpg" width="400" />
<img src="photos/PCB-K0402W-V2.0/chassis-bottom.jpg" width="400" />
Top side (PCB)
<img src="photos/PCB-K0402WS-V2.0/PCB-top.jpg" width="300" />
<img src="photos/PCB-K0402W-V2.0/PCB-top.jpg" width="300" />
### Port layout
@@ -11,21 +11,21 @@ of the device just above the big label, might be covered by a QC sticker.
* Hisource Hi-K0402WS
<img src="photos/PCB-K0402WS-V3.0/HiSource_HI-K0402WS.jpg" width="300" />
<img src="photos/PCB-K0402W-V3.0/HiSource_HI-K0402WS.jpg" width="300" />
* Ztyuav Z-QWYT0402
<img src="photos/PCB-K0402WS-V3.0/Ztyuav_Z-QWYT0402.jpg" width="300" />
<img src="photos/PCB-K0402W-V3.0/Ztyuav_Z-QWYT0402.jpg" width="300" />
<img src="photos/PCB-K0402WS-V3.0/Ztyuav_Z-QWYT0402_label.jpg" width="300" />
<img src="photos/PCB-K0402W-V3.0/Ztyuav_Z-QWYT0402_label.jpg" width="300" />
* SICSOLINK SL-G0402F
<img src="photos/PCB-K0402WS-V3.0/SICSOLINK SL-G0402F.jpg" width="300"/>
<img src="photos/PCB-K0402W-V3.0/SICSOLINK SL-G0402F.jpg" width="300"/>
* YuanLey YS25-0402 <sup><sub>Note: there are [multiple revisions](PCB-K0402WS-V1.0.md) of the YS25-0402. This is the newer revision that has a "Vlan" switch on the front.</sub></sup>
* YuanLey YS25-0402 <sup><sub>Note: there are [multiple revisions](PCB-K0402W-V1.0.md) of the YS25-0402. This is the newer revision that has a "Vlan" switch on the front.</sub></sup>
<img src="photos/PCB-K0402WS-V3.0/YuanLey_YS25-0402.jpg" width="300"/>
<img src="photos/PCB-K0402W-V3.0/YuanLey_YS25-0402.jpg" width="300"/>
### Programming
@@ -37,7 +37,7 @@ The switch actually controls the HOLD line of each flash chip, and toggling the
If the programming clip keeps HOLD not connected, the flashing will commence on whatever the switch selected, regardless on which chip was clipped.
For the initial flash (at least with flashrom), the bin file produced by the build is much smaller than the flash chip, it is suggested to pad the file to keep flashrom happy: `truncate -s 2097152 rtlplayground-*-PCB_K0402WS_V3.bin`. Note: do not then proceed to use this resulting padded file for the web flashing (as it bricks the device), use the original unpadded .bin.
For the initial flash (at least with flashrom), the bin file produced by the build is much smaller than the flash chip, it is suggested to pad the file to keep flashrom happy: `truncate -s 2097152 rtlplayground-*-HISOURCE_HI_K0402WS_PCB_K0402WS_V3_0.bin`. Note: do not then proceed to use this resulting padded file for the web flashing (as it bricks the device), use the original unpadded .bin.
### What works (expected from label + similar devices)
@@ -52,11 +52,11 @@ For the initial flash (at least with flashrom), the bin file produced by the bui
Top side
<img src="photos/PCB-K0402WS-V3.0/PCB-top.jpg" width="300" />
<img src="photos/PCB-K0402W-V3.0/PCB-top.jpg" width="300" />
Bottom
<img src="photos/PCB-K0402WS-V3.0/PCB-bottom.jpg" width="300" />
<img src="photos/PCB-K0402W-V3.0/PCB-bottom.jpg" width="300" />
### T2, serial console
@@ -82,3 +82,15 @@ Voltage is made by a `Techcode TD1720` .
Voltage is created by chip marked as `Techcode TD1720`.
**There seems to have been a miscalculation when choosing the inductor and the device is ~25% more efficient with an 5V power supply.**
## Reset Mod
A reset button can be easily added by soldering a push button from TP131 (near the Spi ROM) to ground via a 1KOhm resistor.
**PS:** `The reset button GPIO must be defined in the machine.c file before building the image, it must be selected the GPIO30_ACL_BIT3_EN instead of GPIO_NA under the PCB-K0402W-V3.0 configuration.`
Photo of the mod
<img src="photos/PCB-K0402W-V3.0/Reset_mod.jpg" width="300" />
@@ -18,6 +18,6 @@ The BoyaMicro 25Q16BSSIG flash chip is supported by flashprog with chip name "B.
The board is marked `PCB-K0501W-V2.0 DIP-K0501WS-V2.0`.
<img src="photos/K0501W_V2_0/pcb-top.jpg" width="300" />
<img src="photos/PCB-K0501W-V2.0/pcb-top.jpg" width="300" />
<img src="photos/K0501W_V2_0/pcb-bottom.jpg" width="300" />
<img src="photos/PCB-K0501W-V2.0/pcb-bottom.jpg" width="300" />
@@ -21,15 +21,15 @@ Using SPI clamp in-board is the only method for initial installation.
### PCB overview
**Board markings**
- Top silkscreen: PCB-KO801W-V2.0 / DIP-KO801WS-V2.0
- Top silkscreen: PCB-K0801W-V2.0 / DIP-KO801WS-V2.0
Top side
<img src="photos/K0801W-V2.0-unmanaged\PCB-top.jpg" width="300" />
<img src="photos/PCB-K0801W-V2.0/PCB-top.jpg" width="300" />
Bottom
<img src="photos/K0801W-V2.0-unmanaged\PCB-bottom.jpg" width="300" />
<img src="photos/PCB-K0801W-V2.0/PCB-bottom.jpg" width="300" />
## Power supply
@@ -22,7 +22,7 @@ PHY RTL8261BE
- 1 × SFP+: 1000 / 2500 / 10000 Mbps
- **Power**: 12V DC, 2A barrel connector
<img src="photos/ZX310S-4T2XH/label.jpg" width="300" />
<img src="photos/PCB-SL310S-4T1T1X-V1.0.1-24107/label.jpg" width="300" />
### What works
The device is fully supported:
@@ -38,11 +38,11 @@ The device is fully supported:
Top side
<img src="photos/ZX310S-4T2XH/pcb_top.jpg" width="300" />
<img src="photos/PCB-SL310S-4T1T1X-V1.0.1-24107/pcb_top.jpg" width="300" />
Bottom
<img src="photos/ZX310S-4T2XH/pcb_bottom.jpg" width="300" />
<img src="photos/PCB-SL310S-4T1T1X-V1.0.1-24107/pcb_bottom.jpg" width="300" />
### J1, serial console
@@ -1,14 +1,14 @@
# SWTG018AS-A V2.0
# PCB-SWTG018AS-A V2.0.1_19649
## Brands
| Brand | Type |Managed| PCB | Flash | Chip RTL |
|---------|------------------|-------|------------------|-----------------|---------------|
| Ampcom | SWTG018AS-A V2.0 | No | SWTG018AS-A V2.0 | 2MB | 8273N + 8224N |
| Horaco | HC-SWTGW218AS-A | Yes | SWTG018AS-A V2.0 | 2MB(25Q16JVSIQ) | 8273N + 8224N |
| GoodTop | GT-ST018M | Yes | SWTG018AS-A V2.0 | 2MB | 8273N + 8224N |
| MokerLink | 2G08110GSN | No | SWTG018AS-A V2.0 | 512KB(25Q40) | 8273N + 8224N |
| Ampcom | PCB-SWTG018AS-A V2.0.1_19649 | No | PCB-SWTG018AS-A V2.0.1_19649 | 2MB | 8273N + 8224N |
| Horaco | HC-MOKERLINK_ZX_SWTGW218AS-A | Yes | PCB-SWTG018AS-A V2.0.1_19649 | 2MB(25Q16JVSIQ) | 8273N + 8224N |
| GoodTop | GT-ST018M | Yes | PCB-SWTG018AS-A V2.0.1_19649 | 2MB | 8273N + 8224N |
| MokerLink | MOKERLINK_2G08110GSN | No | PCB-SWTG018AS-A V2.0.1_19649 | 512KB(25Q40) | 8273N + 8224N |
The following is a documentation for the unmanaged switch marked as `SWTG018AS-A V2.0`.
The following is a documentation for the unmanaged switch marked as `PCB-SWTG018AS-A V2.0.1_19649`.
It is e.g. sold under the Ampcom brand, but no branh-markings are found on the device.
The original software is running UART on 9600 baud rate.
@@ -26,7 +26,7 @@ These can be programed independently by using said switch - so it is e.g. possib
- 1 × SFP+: 1000 / 2500 / 10000 Mbps
- **Power**: 12V DC, 1A barrel connector
<img src="photos/SWTG018AS_A_V_2_0/label.jpg" width="300" />
<img src="photos/PCB-SWTG018AS-A-V2.0.1_19649/label.jpg" width="300" />
### What works
The device is fully supported:
@@ -41,11 +41,11 @@ The device is fully supported:
Top side
<img src="photos/SWTG018AS_A_V_2_0/pcb_top.jpg" width="300" />
<img src="photos/PCB-SWTG018AS-A-V2.0.1_19649/pcb_top.jpg" width="300" />
Bottom
<img src="photos/SWTG018AS_A_V_2_0/pcb_bottom.jpg" width="300" />
<img src="photos/PCB-SWTG018AS-A-V2.0.1_19649/pcb_bottom.jpg" width="300" />
### J1, serial console
@@ -1,5 +1,5 @@
### SWTG024AS-A-V2.0.1_5C_1SFP
It is highly similar to SWTG024AS-V2.0, with the only difference being the GPIO configuration for the SFP port.
It is highly similar to PCB-SWTG024AS-V2.0_16895, with the only difference being the GPIO configuration for the SFP port.
## Brands
|Brand|Type|Managed|PCB|Flash|Chip RTL|
@@ -1,12 +1,12 @@
### SWTG024AS-A-V2.0.1_4C_2SFP
It is highly similar to SWTG024AS-V2.0, with the only difference being the GPIO configuration for the SFP port.
It is highly similar to PCB-SWTG024AS-V2.0_16895, with the only difference being the GPIO configuration for the SFP port.
## Brands
|Brand |Type |Managed|PCB |Flash |Chip RTL|
|---------|--------------|-------|------------------------------|----------------|--------|
| Horaco | ZX-SG4T2 | No | PCB-SWTG024AS-A-V2.0.1_19650 | 512K (P25D40SH)| 8372N |
| Horaco | HC-SWTG124AS | Yes | PCB-SWTG024AS-A-V2.0.1_19650 | 2M (W25Q16JV)| 8372N |
| GoodTop | GT-ST024M | Yes | PCB-SWTG024AS-A-V2.0.1 | 2M | 8372N |
| GoodTop | GT-ST024M | Yes | PCB-SWTG024AS-A-V2.0.1_19650 | 2M | 8372N |
### Label specifications
@@ -15,7 +15,7 @@ It is highly similar to SWTG024AS-V2.0, with the only difference being the GPIO
- 4 × RJ45: 10/100/1000/2500 Mbps
- 2 × SFP+: 1000 / 2500 / 10000 Mbps
<img src="photos/SWTG024AS-A-V2_0_1_19650/horaco-zx-sg4t2-label.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-A-V2.0.1_19650/horaco-zx-sg4t2-label.jpg" width="300" />
### What works
The device is fully supported:
@@ -29,11 +29,11 @@ The device is fully supported:
Top side
<img src="photos/SWTG024AS-A-V2_0_1_19650/horaco-zx-sg4t2-pcb-top.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-A-V2.0.1_19650/horaco-zx-sg4t2-pcb-top.jpg" width="300" />
Bottom
<img src="photos/SWTG024AS-A-V2_0_1_19650/horaco-zx-sg4t2-pcb-bottom.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-A-V2.0.1_19650/horaco-zx-sg4t2-pcb-bottom.jpg" width="300" />
On Horaco HC-SWTG124AS with board PCB-SWTG024AS-A-V2.0.1_19650 the reset button is soldered at `SW1` (on the top left, GPIO48).
@@ -8,14 +8,14 @@ Also the RJ45 connectors can be all plastic/non-shielded or with metal shielding
## Brands
|Brand|Type|Managed|PCB|PCB Label|Flash|Chip RTL|
|---|---|---|---|---|---|---|
| LIANGUO |SWTG024AS |No| SWTG024AS-v2.0-17452 | CM-23-11-2336 023-17453| 512 KiB | 8272 |
| Horaco |ZX-SWTG124AS | Yes | SWTG024AS-v2.0 | ??? | ??? | 8272 |
| Xikestore |SKS3200M-4GPY2XF | Yes | SWTG024AS-v1.0 | CM-23-08-2043 023-16721 | 2048 KiB | 8272 |
| Sodola | SL-SWTG124AS-D | Yes | SWTG024AS-v2.0-17452 | ??? | 2048 KiB | 8272 |
| LIANGUO |SWTG024AS |No| PCB-SWTG024AS-V2.0-17452 | CM-23-11-2336 023-17453| 512 KiB | 8272 |
| Horaco |ZX-SWTG124AS | Yes | PCB-SWTG024AS-V2.0-17452 | ??? | ??? | 8272 |
| Xikestore |SKS3200M-4GPY2XF | Yes | PCB-SWTG024AS-V2.0-17452 | CM-23-08-2043 023-16721 | 2048 KiB | 8272 |
| Sodola | SL-SWTG124AS-D | Yes | PCB-SWTG024AS-V2.0-17452 | ??? | 2048 KiB | 8272 |
## PCB
<img src="photos/SWTG024AS-v2.0-unmanaged/SWTG024AS-v2.0-top-uman.png" width="300" />
<img src="photos/PCB-SWTG024AS-V2.0-17452/SWTG024AS-v2.0-top-uman.png" width="300" />
# SWTG024AS-v2.0 managed vs unmanged
Changes I found with my board vs [Managed version](https://github.com/up-n-atom/SWTG118AS/tree/main/photos/SWGT024AS-v2.0) of the PCB.
@@ -1,4 +1,4 @@
### SWTG024AS-V2.0
### PCB-SWTG024AS-V2.0_16895
## Brands
|Brand|Type|Managed|PCB|Flash|Chip RTL|
@@ -13,7 +13,7 @@
- 1 × SFP+: 1000 / 2500 / 10000 Mbps
- **Power**: 12V DC, 1A 5525 connector
<img src="photos/SWTG024AS-V2.0/label.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-V2.0_16895/label.jpg" width="300" />
### What works
The device is fully supported:
@@ -24,15 +24,15 @@ The device is fully supported:
### PCB overview
**Board markings**
- Top silkscreen: PCB-SWTG024AS-V2.0
- Top silkscreen: PCB-SWTG024AS-V2.0_16895
Top side
<img src="photos/SWTG024AS-V2.0/pcb_top.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-V2.0_16895/pcb_top.jpg" width="300" />
Bottom
<img src="photos/SWTG024AS-V2.0/pcb_bottom.jpg" width="300" />
<img src="photos/PCB-SWTG024AS-V2.0_16895/pcb_bottom.jpg" width="300" />
### J1, serial console
+48
View File
@@ -0,0 +1,48 @@
### SWTG024AS-V2.1
## Brands
|Brand|Type|Managed|PCB|Flash|Chip RTL|
|---|---|---|---|---|---|
| Xikestor | SKS3200-4E2X | Yes | PCB-SWTG024AS-V2.1.0_19023 | 25Q16A | 8372N |
| Solola | SL902-SWTG024AS | Yes | PCB-SWTG024AS-V2.1.0_19023 | | 8372N |
### Label specifications
- **Ports**:
- 4 × RJ45: 10/100/1000/2500 Mbps
- 2 × SFP+: 1000/2500/10000 Mbps
- **Power**: 1A @ 12V DC
#### Xikestore SKS-3200-4E2X label
<img src="photos/PCB-SWTG024AS-V2.1.0_19023/label.jpg" width="300" />
### What works
- ALL 2.5GBASE-T RJ45 ports work at 10/100/1000/2500 Mbps
- The SFP+ ports supports 1G, 2.5G and 10G modules.
- LEDs work with the same indiciations as the OEM firmware.
### PCB overview
**Board markings**
- Top silkscreen: PCB-SWTG024AS-V2.1.0_19023
Top side
<img src="photos/PCB-SWTG024AS-V2.1.0_19023/pcb-top.jpg" width="300" />
Bottom
<img src="photos/PCB-SWTG024AS-V2.1.0_19023/pcb-bottom.jpg" width="300" />
### Serial console
The four-pin through-hole serial header can be seen to the right of the CPU heatsink in the photo above. It is labelled J1, with pin 1 (Indicated by a triangle on the silkscren) at the bottom. the pinout is also on the silkscreen:
| Pin | Label |
|-----|--------|
| 1 | TX |
| 2 | RX |
| 3 | GND |
| 4 | 3V3 |
Adding a header is a few moments work with a soldering iron. Only pins 1-3 are required for serial port use, and the stock firmware outputs at 57600bps at boot.
@@ -6,6 +6,7 @@
|---|---|---|---|---|---|
| Lianguo | ZX-SWTGW215AS | Yes | PCB-SWTG115AS-V2.0 | FM25Q16A | 8372 |
| sold as Lianguo, actual device unbranded | ZX-SWTGW215AS | Yes | PCB-SWTG115AS-V2.1 | W25Q16JVSIQ (2MiB) | 8372 |
| Sodola | SL-SWTGW215AS-D | Yes | SWTG115AS-V2.1-17433 | W25Q16JVSIQ (2MiB) | 8372 |
## RTLPlayground target
@@ -16,17 +17,17 @@ Port 5 RJ45 is interfaced through a RTL8221B IC.
## Label (V2.0)
<img src="photos/ZX-SWTGW215AS-V2.0/label.jpg" width="300" />
<img src="photos/PCB-SWTG115AS-V2.0-16030/label.jpg" width="300" />
## PCB (V2.0)
<img src="photos/ZX-SWTGW215AS-V2.0/pcb_top.jpg" width="300" />
<img src="photos/ZX-SWTGW215AS-V2.0/pcb_bottom.jpg" width="300" />
<img src="photos/PCB-SWTG115AS-V2.0-16030/pcb_top.jpg" width="300" />
<img src="photos/PCB-SWTG115AS-V2.0-16030/pcb_bottom.jpg" width="300" />
## PCB (V2.1)
<img src="photos/ZX-SWTGW215AS-V2.1/pcb-top.jpg" width="300" />
<img src="photos/ZX-SWTGW215AS-V2.1/pcb-bottom.jpg" width="300" />
<img src="photos/PCB-SWTG115AS-V2.1-17443/pcb-top.jpg" width="300" />
<img src="photos/PCB-SWTG115AS-V2.1-17443/pcb-bottom.jpg" width="300" />
## Connectors
@@ -68,7 +69,7 @@ Port 5 RJ45 is interfaced through a RTL8221B IC.
This connector goes to U4 `I2C EEPROM` and U10 `SPI FLASH` (mappings identical to SWTG024AS).
For detailed Slave Interface functionality and protocol information, see [T3 documentation in SWTG024AS.md](SWTG024AS.md#t3-slave-interface).
For detailed Slave Interface functionality and protocol information, see [T3 documentation in SWTG024AS.md](PCB-SWTG024AS-V2.0-17452.md#t3-slave-interface).
|`T3` pin|what|Signal|
|---|---|---|
@@ -108,7 +109,7 @@ For detailed Slave Interface functionality and protocol information, see [T3 doc
#### Notes
* 1 pin is square shaped.
* Mapping unverified but assumed the same as [LIANGUO SWTG024AS](SWTG024AS.md#t8).
* Mapping unverified but assumed the same as [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#t8).
## Reset Circuit
| Function | GPIO |
@@ -120,7 +121,7 @@ For detailed Slave Interface functionality and protocol information, see [T3 doc
## GPIO
Note: T3/U4/U10-related signal annotations below are copied from [LIANGUO SWTG024AS T3 section](SWTG024AS.md#t3-slave-interface) as well as T8 port from [LIANGUO SWTG024AS T8 section](SWTG024AS.md#t8). They should be treated as assumed identical for ZX-SWTGW215AS as it has not been 100% confirmed true at the moment.
Note: T3/U4/U10-related signal annotations below are copied from [LIANGUO SWTG024AS T3 section](PCB-SWTG024AS-V2.0-17452.md#t3-slave-interface) as well as T8 port from [LIANGUO SWTG024AS T8 section](PCB-SWTG024AS-V2.0-17452.md#t8). They should be treated as assumed identical for ZX-SWTGW215AS as it has not been 100% confirmed true at the moment.
| HEX VAL. | GPIO | Component / Purpose | Notes | | GPIO | Component / Purpose | Notes |
| -------- | ------ | ---- | ---- | ---- | ---- | ---- | ---- |
@@ -134,14 +135,14 @@ Note: T3/U4/U10-related signal annotations below are copied from [LIANGUO SWTG02
| 00000080 | GPIO07 | | | | GPIO39 | J4-4 | SFP I2C SDA |
| 00000100 | GPIO08 | | | | GPIO40 | J4-5 | SFP I2C SCL |
| 00000200 | GPIO09 | | | | GPIO41 | | |
| 00000400 | GPIO10 | | | | GPIO42 | U10-P6, U4-P6, T3-1 | SPI FLASH CLK / I2C-SCL (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00000800 | GPIO11 | | | | GPIO43 | U10-P5, U4-P5, T3-3 | SPI FLASH DI/IO0 / I2C-SDA (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00001000 | GPIO12 | | | | GPIO44 | U10-P2, T3-5 | SPI FLASH DO/IO1 (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00002000 | GPIO13 | PORT1 LED GREEN | | | GPIO45 | U10-P1, T3-6 | SPI FLASH CS (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00004000 | GPIO14 | PORT1 LED ORANGE | | | GPIO46 | T8-1 | (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00008000 | GPIO15 | | | | GPIO47 | T8-5 | (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00010000 | GPIO16 | PORT2 LED GREEN | | | GPIO48 | T8-3 | (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00020000 | GPIO17 | PORT2 LED ORANGE | | | GPIO49 | T8-6 | (from [LIANGUO SWTG024AS](SWTG024AS.md#gpio)) |
| 00000400 | GPIO10 | | | | GPIO42 | U10-P6, U4-P6, T3-1 | SPI FLASH CLK / I2C-SCL (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00000800 | GPIO11 | | | | GPIO43 | U10-P5, U4-P5, T3-3 | SPI FLASH DI/IO0 / I2C-SDA (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00001000 | GPIO12 | | | | GPIO44 | U10-P2, T3-5 | SPI FLASH DO/IO1 (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00002000 | GPIO13 | PORT1 LED GREEN | | | GPIO45 | U10-P1, T3-6 | SPI FLASH CS (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00004000 | GPIO14 | PORT1 LED ORANGE | | | GPIO46 | T8-1 | (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00008000 | GPIO15 | | | | GPIO47 | T8-5 | (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00010000 | GPIO16 | PORT2 LED GREEN | | | GPIO48 | T8-3 | (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00020000 | GPIO17 | PORT2 LED ORANGE | | | GPIO49 | T8-6 | (from [LIANGUO SWTG024AS](PCB-SWTG024AS-V2.0-17452.md#gpio)) |
| 00040000 | GPIO18 | PORT3 LED GREEN | | | GPIO50 | | |
| 00080000 | GPIO19 | PORT3 LED ORANGE | | | GPIO51 | | |
| 00100000 | GPIO20 | PORT4 LED GREEN | | | GPIO52 | | |
@@ -176,7 +177,7 @@ Note: T3/U4/U10-related signal annotations below are copied from [LIANGUO SWTG02
## Notes
While [SWTG024AS.md](SWTG024AS.md) can be used as a general reference for hardware concepts and interface specifications, this device should not be assumed to be identical beside the difference implicitely highlighted below. Not all information has been validated for compatibility with the SWTG215AS. Consult the SWTG024AS documentation with caution and verify any critical details against this device's.
While [SWTG024AS.md](PCB-SWTG024AS-V2.0-17452.md) can be used as a general reference for hardware concepts and interface specifications, this device should not be assumed to be identical beside the difference implicitely highlighted below. Not all information has been validated for compatibility with the SWTG215AS. Consult the SWTG024AS documentation with caution and verify any critical details against this device's.
## Flashing
+1
View File
@@ -0,0 +1 @@
PCB-SWTG115AS-V2.0-16030.md
+31
View File
@@ -0,0 +1,31 @@
### ZX-MOKERLINK_ZX_SWTGW218AS
## Brands
|Brand|Type|Managed|PCB|Flash|Chip RTL|
|---|---|---|---|---|---|
| Mokerlink | ZX-MOKERLINK_ZX_SWTGW218AS | Yes| PCB-SWTG118AS-V2.0-16029 | 2MB (FM25Q16A)| 8273N + 8224N |
| Sodola | | | | | |
| Horaco | HC-MOKERLINK_ZX_SWTGW218AS | Yes | SWTG118AS-V2.1 | 2MB | 8373 (non-N) |
| XikeStor | SKS3200-8E1X | Yes | SWTG118AS-V2.1-17462 | 2MB (25Q16JVSIQ) | |
All boards in this table use `MACHINE=MOKERLINK_ZX_SWTGW218AS`. The Horaco HC-MOKERLINK_ZX_SWTGW218AS is also sold with the
[PCB-SWTG018AS-A V2.0.1_19649](PCB-SWTG018AS-A-V2.0.1_19649.md) board, which needs a different firmware. Check the marking
on the PCB before flashing.
The PHY and flash-chip models for the tested Horaco units remain unverified.
## Photos
<img src="photos/PCB-SWTG118AS-V2.0-16029/front.png" width="800" />
<img src="photos/PCB-SWTG118AS-V2.0-16029/label.jpg" width="800" />
## PCB
See up'n'atom's Repo:
https://github.com/up-n-atom/SWTG118AS/blob/main/photos/SWTG118AS-v2.0/SWTG118AS-v2.0-pcb-top.JPG
https://github.com/up-n-atom/SWTG118AS/blob/main/photos/SWTG118AS-v2.0/SWTG118AS-v2.0-pcb-bottom.JPG
@@ -1,4 +1,4 @@
# Hasivo S1100P-8GT-1SX-S
# Hasivo S1100P-8GT-1SX-73N-S-V1.01
RTL8373N switch with 8 × 2.5G RJ45 ports and 1 × SFP port. GD25Q16 2 MiB flash.
@@ -29,13 +29,13 @@ PoE is managed by an RTL8238B and a separate STC8H8K64U controller, not directly
Front panel:
![Front panel](photos/Hasivo-S1100P-8GT-1SX-S/front.jpg)
![Front panel](photos/S1100P-8GT-1SX-73N-S-V1.01/front.jpg)
PCB top:
![PCB top](photos/Hasivo-S1100P-8GT-1SX-S/pcb_top.jpg)
![PCB top](photos/S1100P-8GT-1SX-73N-S-V1.01/pcb_top.jpg)
PCB bottom:
![PCB bottom](photos/Hasivo-S1100P-8GT-1SX-S/pcb_bottom.jpg)
![PCB bottom](photos/S1100P-8GT-1SX-73N-S-V1.01/pcb_bottom.jpg)
@@ -22,21 +22,21 @@ RTL8373-based 8×2.5G PoE + 1×SFP switch.
Front panel:
<img src="photos/HASIVO_S1100WP-8GT-1SX-SE/front.jpg" width="600" />
<img src="photos/S1100W-8GT-1SX_SE-V1.05/front.jpg" width="600" />
Label:
<img src="photos/HASIVO_S1100WP-8GT-1SX-SE/label.jpg" width="600" />
<img src="photos/S1100W-8GT-1SX_SE-V1.05/label.jpg" width="600" />
### PCB overview
Top side:
<img src="photos/HASIVO_S1100WP-8GT-1SX-SE/pcb_top.jpg" width="600" />
<img src="photos/S1100W-8GT-1SX_SE-V1.05/pcb_top.jpg" width="600" />
Bottom side:
<img src="photos/HASIVO_S1100WP-8GT-1SX-SE/pcb_bottom.jpg" width="600" />
<img src="photos/S1100W-8GT-1SX_SE-V1.05/pcb_bottom.jpg" width="600" />
### Port layout
+148
View File
@@ -0,0 +1,148 @@
# Sirivision SR-S25G2109F (S25G1109FP V1.3)
RTL8373 (non-N) with an RTL8224 quad 2.5G PHY: 8 × 2.5G RJ45 + 1 × SFP+,
2 MB flash, no PoE.
## Label specifications
| Item | Value |
|------|-------|
| Manufacturer | Sirivision |
| Model | SR-S25G2109F |
| Ports | 8 × RJ45 10/100/1000/2500 Mbps, 1 × SFP+ 1G/2.5G/10G |
| Power input | 12 V DC, 1.5 A |
| Stock firmware | version 1.0.8.0 |
| Stock defaults | IP 192.168.1.199, user `admin`, password `admin` |
| Serial number | 001008130002003A000005 (also on the PCB barcode sticker) |
The label does not carry a MAC address. After a factory initialisation the
stock firmware uses exactly the values printed on the label.
## PCB silkscreen and naming
Top side: `S25G1109FP V1.3 SIRIVISION`. That model name belongs to an unmanaged
PoE switch; this board omits the PoE section entirely. What is actually shipped
is the label model `SR-S25G2109F`: a simply managed, non-PoE switch. Its stock
firmware provides a web interface, but it responds very slowly.
## CPU, PHY and flash
| Part | Identification |
|------|----------------|
| SoC | RTL8373, non-N: `regget 4` returns `0x83730000` and the boot console prints `Detecting CPU: RTL8373` |
| PHY | RTL8224, reported as `RTL8224 ID: 0x82240000` |
| Flash | GigaDevice 25Q16ESIG (U7), 2 MB, JEDEC id `c8 40 15` |
The two large ICs sit under soldered heatsinks, their markings are not readable.
## Build
```
make MACHINE=SIRIVISION_SR_S25G2109F CI=1
```
The resulting image can be uploaded through the web interface (`System` page)
or the stock web UI.
## Port mapping
| Front port | ASIC MAC | Interface |
|------------|----------|-----------|
| 1–8 | 0–7 | RJ45 2.5G |
| 9 | 8 | SFP+ (SDS1) |
## Board signals
| Function | GPIO |
|----------|------|
| SFP detect (ModAbs) | 30, low with a module inserted |
| SFP LOS | 37, high without light |
| SFP TX disable | not connected, `GPIO_NA` |
| SFP I2C | SDA 39 / SCL 40, `I2CBUS(GPIO39_I2C_SDA4, GPIO40_I2C_SCL3_MDC1)` |
| Reset button | 54 |
ModAbs and LOS are separate signals here: GPIO30 tells whether a module is
inserted, GPIO37 whether it receives light, so a module is identified even
before the link comes up and loss of signal is reported. GPIO38 and GPIO48,
which the 8+1 reference boards use for ModAbs and for the reset button, never
change on this board; with GPIO38 as ModAbs the firmware believed a module was
permanently present and retried the I2C read forever.
Serial console: the stock firmware runs the loader at 57600 baud and the runtime
at 9600 baud, RTLPlayground uses 115200.
## Front panel
Each copper port has two LEDs, labelled `Link/Act` (left, yellow) and `2.5G`
(right, green). The SFP cage has a single green `Link/Act` LED; next to it are
a `Power` LED and the `Reset` button.
## LED configuration
Copper ports use LED set 0, the SFP port uses LED set 1:
| Set | Function 0 (left / SFP) | Function 1 (right) |
|-----|-------------------------|--------------------|
| SET0 | all speeds, link with activity | 2.5G link |
| SET1 | all speeds, link with activity | not populated |
The board is wired in the stock port order — LED pin `3n+m` belongs to port
`n+1`, LED function `m` — so the mux table is the chip default with a single
change: the SFP LED sits on pin 25 and is driven by LED function 0, while the
default table maps pin 25 to function 1, which is unpopulated in SET1. Without
that change the SFP LED stays dark.
A speed condition alone leaves an LED dark, `LEDS_LINK` has to be set as well.
## Reset button
| Hold time while running | Effect |
|-------------------------|--------|
| less than 3 s | no action |
| 3–10 s | reset the switch chip, the firmware reboots (~20 s of downtime) |
| more than 10 s | additionally restore the default configuration |
The system LED blinks slowly while the button is held. Holding the button
during power-up instead waits for the release and restores the default
configuration when it is released after 10–30 s.
## MAC address
The factory MAC sits at `0x1FC000`, six bytes followed by `0xFF` padding. The
stock value is a locally administered address (`1A:5D:23:47:4D:EB`), which the
firmware rejects, so the device runs with a UUID-derived MAC (`06:…`). A valid
globally administered address stored there is used instead.
## What works
- all eight 2.5GBASE-T ports at 10/100/1000/2500 Mbps
- SFP+ with 10G and 1G modules, including DDM data where the module provides it
- 10G: Finisar FCBG110SD1C05 AOC (no DDM), rate `0x67`, SerDes mode `1a`
- 1G: ETU ESB5312-3SCD20 (DDM), rate `0x0d`, SerDes mode `04`
- LEDs, module insert/remove detection, loss of signal reporting, reset button
## Unverified
- 2.5G SFP modules, none was available for testing
## Photos
Front panel:
![Front panel](photos/S25G1109FP-V1.3/front.jpg)
Label:
![Label](photos/S25G1109FP-V1.3/label.jpg)
PCB top side:
![PCB top side](photos/S25G1109FP-V1.3/pcb_top.jpg)
PCB bottom side:
![PCB bottom side](photos/S25G1109FP-V1.3/pcb_bottom.jpg)
Flash chip, GigaDevice 25Q16ESIG:
![Flash chip](photos/S25G1109FP-V1.3/flash.jpg)
@@ -25,7 +25,7 @@ The device is fully supported:
Top side
<img src="photos/SIRIVISION_S25G2206FP_V1_1/dev_pcb_top.jpg" width="300" />
<img src="photos/S25G2206FP-V1.1/dev_pcb_top.jpg" width="300" />
## Power supply
-31
View File
@@ -1,31 +0,0 @@
### ZX-SWTGW218AS
## Brands
|Brand|Type|Managed|PCB|Flash|Chip RTL|
|---|---|---|---|---|---|
| Mokerlink | ZX-SWTGW218AS | Yes| SWTG118AS-V2.0-16029 | 2MB (FM25Q16A)| 8273N + 8224N |
| Sodola | | | | | |
| Horaco | HC-SWTGW218AS | Yes | SWTG118AS-V2.1 | 2MB | 8373 (non-N) |
| XikeStor | SKS3200-8E1X | Yes | SWTG118AS-V2.1-17462 | 2MB (25Q16JVSIQ) | |
All boards in this table use `MACHINE=SWTGW218AS`. The Horaco HC-SWTGW218AS is also sold with the
[SWTG018AS-A V2.0](SWTG018AS_A_V2_0.md) board, which needs a different firmware. Check the marking
on the PCB before flashing.
The PHY and flash-chip models for the tested Horaco units remain unverified.
## Photos
<img src="photos/SWTGW218AS-managed/front.png" width="800" />
<img src="photos/SWTGW218AS-managed/label.jpg" width="800" />
## PCB
See up'n'atom's Repo:
https://github.com/up-n-atom/SWTG118AS/blob/main/photos/SWTG118AS-v2.0/SWTG118AS-v2.0-pcb-top.JPG
https://github.com/up-n-atom/SWTG118AS/blob/main/photos/SWTG118AS-v2.0/SWTG118AS-v2.0-pcb-bottom.JPG
Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Loaded 100 of 384 files, more files were not shown because too many files have changed in this diff. Show more