René van Dorst
bbd4656810
SERIAL: Use Timer1 instead of Timer2
...
Use Timer1 as baudrate generator.
Timer1 can be programmed to have the same accuracy and deviation as
Timer2, up to 115200 at F_SYS = 125 Mhz. See comment
setup_serial_timer1() comment for valid baudrates and settings.
Timer1 is used in 8-bit auto-reload mode.
Timer2 16-bit auto-reload can now be used for other tasks like SYS_TICK.
2026-01-04 14:15:30 +01:00
René van Dorst
8b061d5fb9
SYS_TICK: Use Timer2 instead of Timer0.
...
Downside of Timer0 is, we have to manually reload
the timer value. Timer2 can do that automaticly.
This saves a lot of time in the interrupt-handler
of the Timer.
Currently Timer2 is used for baudrate-generation
but in a separete commit this is moved to Timer1.
2026-01-04 14:14:52 +01:00
René van Dorst
9ff114d234
SYSTICK: Fix writing value to TMR0 registers.
...
A `%` modulo operator was used instead of a
`&` and-operator, to split a 16 bit value into two
8 bit values.
This causes that the SYSTICKs were 0.1% too fast.
Replace the manual split with a sfr16 type, so the
compiler does the split for us.
2025-12-26 10:07:13 +01:00
René van Dorst
0abe83e3e5
sfr: add 16 bit SFR for the timer0.
...
So we don't have to manual split 16-bit value into
for bytes.
Let the compiler do the work.
2025-12-26 10:07:11 +01:00
René van Dorst
2a7b8f9838
Merge pull request #59 from logicog/timer_fixes
...
Fix internal timer tick counter for housekeeping.
Because of the high F_CPU and low SYS_TICK.
Timer0 can easy overflow.
Now this is known and fixed.
2025-12-25 09:54:58 +00:00
René van Dorst
a8227f1855
Merge pull request #54 from logicog/speeds
...
Add a Port Speed and MTU configuration Web-Page
2025-12-25 09:11:31 +00:00
René van Dorst
3ef7e45649
SWGT024_V2_0: Fix port mapping. Port 2 & 3 were swapped.
2025-12-23 14:30:27 +01:00
René van Dorst
053c16b84e
SWTG024AS: Document Slave Interface
2025-12-22 14:32:23 +01:00
René van Dorst
4e9fb19e05
SWTG024AS: more small changes
2025-12-20 20:36:41 +01:00
René van Dorst
0a0e1856ae
SWTG024AS: Link to photo
2025-12-20 14:50:25 +01:00
René van Dorst
cedd81cf00
SWTG024AS: Fix and use unit KiB, add missing managed flag.
2025-12-20 14:44:38 +01:00
René van Dorst
bf00f9aa2c
Merge pull request #57 from ranma/baudrate-rounding
...
Add rounding to baud rate calculation
2025-12-20 11:55:42 +00:00
René van Dorst
0779222194
SWTG024AS: Add Sodola SL-SWTG124AS-D
...
Info from #55 .
2025-12-19 21:07:11 +01:00
René van Dorst
44ce073869
SWTG024AS: Add port overview, rename SDS to SerDes
2025-12-19 21:03:47 +01:00
René van Dorst
12595f806a
Merge pull request #50 from logicog/sfp_readings
...
Show SFP + DOM info while hovering over the port.
2025-12-17 06:50:41 +00:00
René van Dorst
9c4d49bc8c
Merge pull request #49 from logicog/igmp
...
Add basic IGMP support.
2025-12-15 06:45:20 +00:00
René van Dorst
677e01fa18
Merge pull request #39 from logicog/sfp_work
...
Put all the device information in one struct `machine`.
So all the device information is defined in one place.
Also easier to add new devices.
Show device name also on website.
Fix SFP status information, some devices have a different SFP layout.
Reworks GPIO handling
Able to set manual port speed, duplex for the RJ45 ports.
2025-12-14 11:53:23 +00:00
René van Dorst
0197c9b6cf
Fixed to make SWGT024 V2.0 work
2025-12-14 11:49:38 +01:00
René van Dorst
11d2c843e5
Fixed to make SWGT024 V2.0 work
2025-12-13 22:22:40 +01:00
René van Dorst
fccafe8059
Merge pull request #43 from logicog/lags
...
feature LAGs support.
2025-12-07 09:12:21 +00:00
René van Dorst
1c78d32493
Merge pull request #36 from logicog/config
...
System settings and configuration management
2025-12-01 19:22:03 +00:00
René van Dorst
f59be9cf2b
Added software version + git short hash string to firmware.
...
The Makefile has the version number and generates a version.h which
has VERSION_SW define that looks like "v<VERSION>-g<GIT_SHORT_HASH>".
Software version shows at boot in the serial console.
And shown with command: `version`.
It can also be requested via `information.json`.
```
{
"ip_address": "192.168.10.247",
"ip_gateway": "192.168.10.1",
"ip_netmask": "255.255.255.0",
"mac_address": "1c:2a:a3:23:00:02",
"sw_ver": "v0.1.0-gd48235f",
"hw_ver": "SWGT024-V2.0"
}
```
2025-11-26 23:08:23 +01:00
René van Dorst
d48235f652
Merge pull request #37 from logicog/sfp_demagic
...
De-Magic I2C configuration for SFP-EEPROM reads
2025-11-03 21:07:15 +00:00
René van Dorst
aa406e1d98
html: firmware selection: limit extension only to .bin
...
This makes it quicker to select firmware image from the output directory.
You can still select at File type "All Files" if the extention is diffrent.
2025-10-30 21:30:37 +01:00
René van Dorst
1d6f0a2163
Merge pull request #33 from logicog/mirror
...
Mirror
2025-10-30 20:03:22 +00:00
René van Dorst
7d94f3d328
Improve JSON response.
...
Remove all the extra spaces from the json.
Also simplify the generation of the json.
Codespace is cheap so duplicated strings is not an issue.
But generating strings from different parts is more expensive in clock cycles.
Add a helper funcion `bool_to_html()` to generate bool value for html output.
2025-10-28 21:10:26 +01:00
René van Dorst
d0b6a73bf2
Merge pull request #30 from logicog/crc16
...
CRC-16 Calculation and verification
2025-10-26 21:59:50 +00:00
René van Dorst
9929fcc169
Merge pull request #31 from logicog/eee_status
...
Eee status display
2025-10-22 09:12:02 +02:00
René van Dorst
adc4bfc9a0
Merge pull request #29 from logicog/constseg
...
Fix bug in usage of CONST segment in banked code. Use #pragma constseg
2025-10-15 18:34:54 +00:00
René van Dorst
58c21a1986
Merge pull request #28 from logicog/eee
...
Support EEE via CLI
2025-10-11 18:34:39 +00:00
René van Dorst
17fdbf39f0
Add docs: 2M-PCB23-V3.1-managed
2025-10-11 00:11:38 +02:00
René van Dorst
0f48a773d9
Merge pull request #26 from logicog/navbar
...
Navbar
2025-10-10 18:02:04 +00:00
René van Dorst
e5ee4594ef
installer: fix left over typo SFR_FLASH_DUMMYCICLES
2025-10-09 20:03:08 +02:00
René van Dorst
928cf1cf58
http: upload: make sure we don't cross flash page boundaries.
...
This causes the address pointer to wrap back to the front of the page.
Which results in that the beginnen of the page can have data for the next page.
2025-10-07 21:19:36 +02:00
René van Dorst
a59f92a648
Also use struct flash_region in flash_read_security(), flash_sector_erase().
2025-10-05 16:53:46 +02:00
René van Dorst
52fa41760c
Don't pass the first 16-bit argument via xdata.
...
Calling confention already uses the DPTR registers as the first two byte arguments.
So adds a lot of code to put the 16-bit value on xdata, still passes the 16-bit xdata ptr in DPTR registers, then read the xdata value.
So it doesn't save any sram bytes.
2025-10-05 16:22:23 +02:00
René van Dorst
1bec5cdf8a
Add basic config.txt
2025-10-05 16:18:39 +02:00
René van Dorst
884bc18a61
Remove flash_read_bulk(), refactor website and execute_config().
...
flash_read_bulk() is kind of a printf function. But did not work as well.
flash_read_bulk() was used in the http generation so this needed to be changed as well.
For the website we decided that we are going to use CSR(Client Side Rendering).
So every HTML and JS files are now static.
Variables are fetched via json calls and output is render on the client side.
Also usefull for the future when we want a REST like API.
execute_config() was also using flash_read_bulk().
This have been replaced with flash_read_bulk() and parsing the flash_buf buffer.
2025-10-05 15:47:14 +02:00
René van Dorst
7a87b79871
Convert flash_addr to struct flash_region.
...
flash_region storage flash address and length, which a operation is needed.
2025-10-05 15:36:08 +02:00
René van Dorst
815e47d5cc
doc: SWTG024AS: Fix component notation and fix SPIMEM signal typo.
2025-09-27 19:30:30 +02:00
René van Dorst
de1c707f74
tools/fileadder: fix compiler warnings
...
fileadder.c: In function ‘main’:
fileadder.c:220:16: warning: unused variable ‘len’ [-Wunused-variable]
220 | size_t len = 0;
| ^~~
fileadder.c:219:16: warning: unused variable ‘line’ [-Wunused-variable]
219 | char * line = NULL;
| ^~~~
2025-09-27 17:00:54 +02:00
René van Dorst
373d723d47
build: tools: also declutter sourcecode
2025-09-27 16:52:50 +02:00
René van Dorst
2676dbd0d6
build: install: also declutter sourcecode
2025-09-27 12:52:35 +02:00
René van Dorst
432d9d77de
build: uip: also declutter sourcecode
2025-09-27 12:52:31 +02:00
René van Dorst
0ac4792dde
build: httpd: also declutter sourcecode
2025-09-27 12:52:24 +02:00
René van Dorst
60b854550d
build: don't clutter the sources with build artifacts.
...
Tell sdcc to place it artifacts in "output/" folder.
2025-09-27 12:51:58 +02:00
René van Dorst
9f488415a8
Remove rtlplayground.mem
2025-09-27 12:21:19 +02:00
René van Dorst
2e52bcac8e
Merge pull request #20 from logicog/installer
...
WIP: Add initial installer code
2025-09-26 17:39:46 +00:00
René van Dorst
9c41ada27f
docs: SWTG024AS more IO found
2025-09-19 22:09:41 +02:00
René van Dorst
6e2b06fc27
docs: SWTG024AS: More led information found
2025-09-18 23:12:28 +02:00
René van Dorst
2eb1416ada
httpd: fix print ip-address, added missing shift.
2025-09-11 07:47:33 +02:00
René van Dorst
f148bdad20
port: fix REG_SET() compiler warning.
...
Compiler
rtl837x_port.c:466: warning 116: right shifting more than size of object changed to zero
provided value is a uint16. So shifting it more then 16 cause this error.
Solution: cast the value to uint32_t.
2025-09-11 07:36:01 +02:00
René van Dorst
8ff124af30
httpd: fix itoa_html() does not print the middle zero.
...
when the input is 100.
the first zero is not printed because t = 0 and skip printing.
So the output is "10" instead of "100".
2025-09-11 07:34:18 +02:00
René van Dorst
94ae1472c3
httpd: optimize sfr_data_to_html()
...
This also fixes a compiler warning.
page_impl.c: warning 110: conditional flow changed by optimizer: so said EVELYN the modified DOG
2025-09-11 07:34:16 +02:00
René van Dorst
24f588effd
httpd: Also don't byte_to_html() and itoa_html() to save 1.5kbytes.
...
Also fixed compiler "warning page_impl.c:47: warning 126: unreachable code".
But I think it was a false-positive.
2025-09-11 07:32:25 +02:00
René van Dorst
18f1fb5f1a
http: don't inline char_to_html(), save 1k of flash
2025-09-10 16:07:59 +02:00
René van Dorst
e2afa9a61c
Merge pull request #18 from vDorst/doc_SWTG024AS_v2.0_unmanaged_p2
...
fix: doc: SWTG024AS managed version can´t use RX-LOS.
2025-09-08 18:20:43 +00:00
René van Dorst
455d2e28d6
fix: isletter(), make everything lowercase.
2025-09-08 18:54:48 +02:00
René van Dorst
b2f3d44f2b
fix: doc: SWTG024AS managed version can´t use RX-LOS.
...
Added the serial header pinout.
Correction: Powerled is Systemled.
2025-09-08 18:45:20 +02:00
René van Dorst
7f9147918a
docs: SWTG024AS: remove old spreadsheet, rotate images 180° so silkscreen text is correct.
2025-09-07 23:57:04 +02:00
René van Dorst
588dbf6f83
Update SWTG024AS.md
2025-09-07 21:44:15 +00:00
René van Dorst
845a7f79bd
fix link typo
2025-09-07 23:36:42 +02:00
René van Dorst
f364f61c65
docs: Update SWTG024AS with the right gpio numbering.
...
See #16 with new gpio information, commands etc.
Added GPIO table and notes.
Also found some LEDs but need more investigation how to control them.
2025-09-07 23:32:58 +02:00
René van Dorst
7a2e568fcc
Make a helper isnumber(), replace all same patterns.
2025-09-07 17:22:13 +02:00
René van Dorst
bde8454449
isletter(): optimized version
...
Less instructions and jumps.
Saves 39 bytes.
```patch
1634,1651c1621,1628
< mov r7,a
< mov r6,a
< ; cmd_parser.c:63: return (l >= 'a' && l <= 'z') || (l >= 'A' && l <= 'Z');
< cjne r7,#0x61,00326$
< 00326$:
< mov _parse_vlan_sloc0_1_0,c
< jc 00153$
< mov a,r7
< add a,#0xff - 0x7a
< mov _parse_vlan_sloc0_1_0,c
< jnc 00149$
< 00153$:
< cjne r6,#0x41,00329$
< 00329$:
< mov _parse_vlan_sloc0_1_0,c
< jc 00132$
< mov a,r6
< add a,#0xff - 0x5a
---
> ; cmd_parser.c:66: l |= 0x20;
> ; cmd_parser.c:67: l -= 'A';
> orl a,#0x20
> ; cmd_parser.c:68: return (l <= ('Z'-'A'));
> add a,#0xbf
> add a,#0xff - 0x19
> cpl c
> ; cmd_parser.c:245: if (cmd_words_b[2] > 0 && isletter(cmd_buffer[cmd_words_b[2]])) {
1653,1654c1630
< jc 00132$
< 00149$:
---
> jnc 00132$
```
2025-09-07 17:04:46 +02:00
René van Dorst
54ab915557
cmd: reg{get,set}: more small refactor
...
Refactor some value checking.
Simplified hexvalue to addr.
Updated some comments.
Remove extra debug prints and EOL after the command.
2025-09-07 16:52:51 +02:00
René van Dorst
4cad857ad5
fix: cmd: regset: need add offset when we have less then 8 hex numbers
2025-09-07 16:33:01 +02:00
René van Dorst
1b578405c0
Remove unused and not related to GPIO define
2025-09-07 14:56:13 +02:00
René van Dorst
074c89cf27
cmd: convert reg to regget and regset.
...
We want to stick close to the origonal commands.
See: https://github.com/up-n-atom/SWTG118AS?tab=readme-ov-file#commands
2025-09-07 14:50:50 +02:00
René van Dorst
7e729c626c
cmd: add reg read and write.
...
like:
* `reg w 04`
* `reg w 04 00023678`
2025-09-07 01:03:15 +02:00
René van Dorst
e0864f811f
cmd: move gpio status to a function print_gpio_status()
2025-09-06 17:05:16 +02:00
René van Dorst
74b8280d80
gpio: SOC only has 64 gpio not 96.
...
Remove BANK_A
Rename BANK_B to GPIO_00_31
Rename BACK_C to GPIO_32_63
Added also _INPUT, _DIRECTIOn registers
2025-09-06 17:04:25 +02:00
René van Dorst
f812970ca0
docs: SWTG024AS_v2.0 document power rails.
2025-09-06 12:41:13 +02:00
René van Dorst
e6d90f7a8a
docs: SWTG024AS reword/reformat was parts
2025-09-06 12:13:53 +02:00
René van Dorst
0d63b08f89
Docs: Add SWTG024AS-v2.0-unmanaged version
...
Pinout Spreedsheet, photos and wiki about my findings.
GPIO number may be has endian problem.
2025-09-06 10:23:09 +02:00
René van Dorst
8e9cababfb
gpio: show also bit changes vs last gpio cmd
2025-09-05 00:10:18 +02:00
René van Dorst
f481d1fbe4
add cmd gpio
2025-09-04 23:49:17 +02:00
René van Dorst
71eba81421
Add rtlplaygroud.mem also exclude the file in .gitignore.
...
See PR #10 about mem usage
2025-09-02 22:25:07 +02:00
René van Dorst
001c52ef39
Use phy_modify().
...
This saves 210 bytes.
2025-09-02 22:23:02 +02:00
René van Dorst
c5995a4184
Add: phy_modify() to modify phy_registers.
...
Makes it easier to modify set/clear bit in a phy register.
Simulair like Linux PHY-core: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/phy/phy-core.c#n551
2025-09-02 22:23:02 +02:00
René van Dorst
5316ae9495
Merge pull request #8 from vDorst/feat_gitignore
...
Add .gitignore
2025-09-02 20:21:11 +00:00
René van Dorst
7bc3d2cf49
Add .gitignore
2025-09-02 10:32:40 +02:00
René van Dorst
bcf4ae316c
fix SFR_DATA_U16: must use sfr a6a7 not sfr a4a5!
2025-09-01 16:47:57 +02:00
René van Dorst
22dccbad8c
Replace phy_write_mask(0x1 with phy_write(0x00.
...
Also added define `RTL8224_PHY_ID` for RTL8224 phy_id.
So it is more clear that we want to talk to that phy.
Replaced in the function which contains `8224` in the name the
`phy_write(0x00, ...)` with `phy_write(RTL8224_PHY_ID, ...)`, same for the
`phy_read(0x00, ...)` with `phy_read(RTL8224_PHY_ID, ...)`.
Removed the extra `phy_read()` in `rtl8224_phy_enable()`.
2025-09-01 12:26:27 +02:00
René van Dorst
cc132a8734
phy_write(): also use SFR_DATA_U16 and SFR_SMI_REG_U16
...
Was added by pr#7.
2025-09-01 09:59:41 +02:00
René van Dorst
689d208ff1
phy: fix whitespace and comments alinement
2025-09-01 09:59:06 +02:00
René van Dorst
d865862625
phy: fix or/and-opperation conversion errors
2025-09-01 09:27:28 +02:00
René van Dorst
94cf079fcb
PHY: also use SFR_DATA_U16.
...
Again less error prone and easier to read.
Also see a lot of better optimalizations.
A snipped.
390c390
< ;pval Allocated to registers r3 r4
---
> ;pval Allocated to registers
838,852c838,844
< ; rtl837x_phy.c:181: pval = SFR_DATA_8 & 0xbf;
< mov r7,_SFR_DATA_8
< anl ar7,#0xbf
< ; rtl837x_phy.c:182: pval <<= 8;
< mov ar4,r7
< mov r7,#0x00
< ; rtl837x_phy.c:183: pval |= SFR_DATA_0;
< mov r2,_SFR_DATA_0
< mov r3,#0x00
< mov a,r2
< orl a,r7
< mov _phy_write_PARM_4,a
< mov a,r3
< orl a,r4
< mov (_phy_write_PARM_4 + 1),a
---
> ; rtl837x_phy.c:181: pval = SFR_DATA_U16 & 0xbfff;
> mov r4,((_SFR_DATA_U16 >> 0) & 0xFF)
> mov a,#0xbf
> anl a,((_SFR_DATA_U16 >> 8) & 0xFF)
> mov r7,a
> mov _phy_write_PARM_4,r4
> mov (_phy_write_PARM_4 + 1),r7
864c856
< mov _phy_write_PARM_3,r7
---
> mov _phy_write_PARM_3,#0x00
2025-09-01 09:25:33 +02:00
René van Dorst
b8928a8bcd
Replace manual SFR_DATA_0 and SFR_DATA_8 pair read and write with SFR_DATA_U16.
...
Also added SFR_SMI_REG_U16.
Doing pval = reg_h; pval <<= 8; pval |= reg_l; dont always optimized by the compiler a some places, not all.
A snipped of the diff between two .asm files.
5414,5424c5414,5416
< ; rtlplayground.c:1382: uint16_t pval = SFR_DATA_8;
< ; rtlplayground.c:1383: pval <<= 8;
< mov r7,_SFR_DATA_8
< mov r6,#0x00
< ; rtlplayground.c:1384: pval |= SFR_DATA_0;
< mov r4,_SFR_DATA_0
< mov r5,#0x00
< mov a,r6
< orl ar4,a
< mov a,r7
< orl ar5,a
---
> ; rtlplayground.c:1382: uint16_t pval = SFR_DATA_U16;
> mov r6,((_SFR_DATA_U16 >> 0) & 0xFF)
> mov r7,((_SFR_DATA_U16 >> 8) & 0xFF)
2025-09-01 09:20:36 +02:00
René van Dorst
9dafeab490
Added SFR_NIC_DATA_U16LE and SFR_NIC_RING_U16LE.
...
Let's use sfr16 for NIC data and ring.
SFR define can so reordered to it does the BE to LE swap for us.
2025-09-01 09:20:36 +02:00
René van Dorst
af0135bcce
Add sfr16 SFR_REG_ADDR_U16.
...
So instead do it manual split a uint16_t in to two uint8_t.
The compiler can do it, so reduces user error.
Note: compiler writes the lower/LSB part first.
When that is importent this can´t be used.
Assembly is still the same except note above.
2025-09-01 09:20:36 +02:00
René van Dorst
7ff028303d
Add phy_write() with bit_mask lookup inside the function.
...
Move the lookup saves a lot of instructions for every phy_write() call.
Assembly diff for one change.
< ; rtl837x_phy.c:240: phy_write_mask(bit_mask[port], 0x07, 0x00, 0x3200); // Enable AN
< mov dpl,r5
< mov dph,r6
---
> ; rtl837x_phy.c:240: phy_write(port, 0x07, 0x00, 0x3200); // Enable AN
> mov _phy_write_PARM_2,#0x07
1345,1359c1019,1024
< movc a,@a+dptr
< mov r5,a
< inc dptr
< clr a
< movc a,@a+dptr
< mov r6,a
< mov _phy_write_mask_PARM_2,#0x07
< clr a
< mov _phy_write_mask_PARM_3,a
< mov (_phy_write_mask_PARM_3 + 1),a
< mov _phy_write_mask_PARM_4,a
< mov (_phy_write_mask_PARM_4 + 1),#0x32
< mov dpl, r5
< mov dph, r6
< lcall _phy_write_mask
---
> mov _phy_write_PARM_3,a
> mov (_phy_write_PARM_3 + 1),a
> mov _phy_write_PARM_4,a
> mov (_phy_write_PARM_4 + 1),#0x32
> mov dpl, r7
> lcall _phy_write
Replace all phy_write_mask(bit_mask[<var>], ...) to phy phy_write(<var>, ...).
2025-09-01 00:12:12 +02:00
René van Dorst
d6ea9be4c0
rename phy_write() to phy_write_mask().
...
It seems that bit_mask[phy] lookup is expensive and it used in many places.
But most of the time we only addressing a single phy.
2025-09-01 00:07:27 +02:00
René van Dorst
3d80f73383
fix: comp. warning 283: function declarator with no prototype.
2025-08-30 22:51:19 +02:00
René van Dorst
e859769e5c
http: use python3.
...
Fix compile issue where system don't have python2.
I get error below.
/bin/sh: line 1: ./treatasm.py: cannot execute: required file not found
make[1]: *** [Makefile:15: httpd.rel] Error 127
Debian has python3 a long time so use it.
See https://wiki.debian.org/Python
2025-08-27 23:11:12 +02:00