JL1 (JL3) GRBL firmware avialable

Light Burn is first hit on Google while searching JL1+GRBL.
Those who search know that to surprise and frustration after acquiring machine with JL1 board - it does not speak GRBL dialect and not recognized by most and best laser carving software.

It is certainly possible to recompile GRBL for this STM32 based board from many sources available on GIT, but I can imagine this is beyond abilities of many. Well, there is easy option to get these JL1 boards working with this and other software: Wainlux_JL3_WiFi (JL1 board) originally came with the same incompatible firmware, but has optional GRBL firmware for this board. They did provide firmware download link on request.

Flashing is effortless and now my JL1 speaks GRBL 1.1f. With that - there are a few things that do not work:
-After flashing GRBL - I’ve lost WiFi functionality. ESP12 wired to UART2 on STM32, not sure it firmware compiled to support that. I do not need it anyway. Board communicates over USB CH340 just fine, it is on UART1.
-Homing does not work. Y-axis has hard coded negative offset. It is too large for my machine. I’ve disabled homing cycle and just home it manually before turning power ON. Minor inconvenience.
-laser cross not working. Once again - non-issue. Can be hard wired to stay ON permanently, if you prefer. I aim by main laser anyway.
-There is no way to go back to original firmware, that I know of. Boot loader apparently is gone after flashing GRBL. From that point the only way to change firmware is with custom built firmware from GIT sources. Not like I see any need for it.

GRBL config need to be set, like direction and soft limits, to match your hardware. With that, at no cost JL1 can speak real GRBL.

I can post firmware if there is a way to attach files, or if anyone would like to host it. Or request it from WeinLux support by yourself. Make sure to ask for “JL3 WiFi” and not BLE firmware version.


I recently bought a jl3 and I’m having a lot of trouble finding the firmware to use with lightburn.
Could you do me the favor of passing it to me?
Thank you for your help and your contribution.
All the best!!

I have edited your post to remove the email address. We do not suggest posting this information here in public. :slight_smile:

I would but Rick does not let it, as you see.
Is this forum has PM/DM? I do not see it, or I would just drop it over there.

Alternative are:
Request firmware by yourself from Wainlux, see my original post. This is very easy and so far I’m not aware they rejected anyone. B specific if you have BLE board (I’ve never seeing one) or WiFi. Most people here interested in WiFi/JL1 board, same as JL3 WiFi. Wainlux got back to me in 2 days.

Or suggest some upload/hosting site. I will not register anywhere but if they allow Guest to drop files - I will be happy to do it.

Yes it does. Click user avatar and then click “Message”.

Can you zip and then add .txt as extension? That would allow you to upload the file here.

1 Like

upgrade.zip.txt (38.4 KB)

The zip only had two of the three. Is the JL3 version different?
It is the same size as rom.bin

Can you recover the $ settings before the flash?

Did you look or know of a schematic for the board?


As I’ve stated earlier, third file is identical to second BIN. I guess the intent is to have a collection of named versions. Flasher utility only uses one file with generic name. So, to reduce size I’ve removed redundant file.
Original firmware obviously talking over serial, but I was not able to get anything out of it with Terminal or any g-code app, it just staying silent. Setting Wireshark is not my objective. My intent was just as JL1 machine itself so cheap, to get it going with GRBL dialect for minimal cost. Luckily here it is a way. Original software supposedly can take NC files, I’ve tried but did not work for me once, but I assume there is some kind of g-code dialect, but I have no clue if there is any settings there. Not like it has any value with JL3 firmware.

I’m pretty certain that there is only one kind JL1 machine (from Amazon) that is causing all this chatter, Please check this topic . My settings for it are there. You may set values one by one, or save as txt, rename to NC and import to/send with pretty much any laser/gcode software.

Schematic: This is pretty generic STM32 Blue Pill type board with pretty standard peripherals. I’m considering effort to recompile proper firmware, at least to properly support homing cycle and enable that laser cross pointer. If and when I have inspiration and time - I might. For now, honestly, it just good enough, even while homing by hand.

I did map most (I hope all) pins on STM32. I did not do detailed schematic as this has no value to me, just enough to define pin-out for firmware. Either way, I can say that “flash 0 and 1” have pull-downs, so raw flashing through serial port is relatively easy. There is also appeared to be header for ST-Link, if it works then messing with firmware is pretty easy. I did not get that far yet.

1 Like

When I ‘upgrade’ with the .exe program on a windows machine, the green bar does not complete. It just clears the progress bar and returns to ‘upgrade’ window.

Did yours do something similar?

Nothing will talk to it, but they can see the connection.



Did you follow the procedure? (flip the switch OFF, then hold the button, then power up, hold for few more seconds and release the button, then start the app).
Have you unzipped it? Do not run straight from ZIP, app probably not able to see the bin file.

Also check the driver for the COM port (CH340), make sure it is setup and running with no problem.
CH340 getting power from USB, so as long as USB is plugged in - you should see the COM port. STM32 getting power from 12V jack, only active when power switch is on. (if you are able to use original software on Windows PC then your COM port is setup.)

Have it unzipped. I believe it’s talking to the controller, in that it appears to find it.

When I click on the ‘start update’ button, it changes to ‘updating’ and the green bar goes about 80% of the way up. The bar is cleared and the button is returned to ‘start update’…

Did yours acknowledge that it completed ?

Originally didn’t do the power, button thing, but attempted that and no difference.

If I remove the usb cord and click ‘start update’ it gives me an error message that there is no device… So I think it’s finding it…

The usb port from the controller must be up as I can get it’s vendor id… but nothing, like a regular terminal will talk to it, at least it doesn’t respond.

If I set console to “Show all”, I only see a G0 being sent repeatedly. Doesn’t appear to answer.


I did a while ago and I did not specifically memorize all chain of events, or it was rather uneventful.

My stumbling was over boot loader mode.
Let’s verify if you are in boot loader mode: after powering up with button pressed it is no longer usable with original software, but after normal power cycle it should be back to normal operation.

Also, as a fact I did had both files in the directory. Just in case, who knows, maybe it is running some kind of redundancy check, I’m attaching named version of the file. Make sure EXE and both BINs in the same directory.
Let me know how it goes.

JL3_grbl(v1-211202).zip.txt (26.1 KB)

It doesn’t home anymore, so there’s no reason to think it will work with the original software, but I’ll give it a shot.

Whatever I did to it without putting it in boot mode apparently broke it :frowning:

It hasn’t operated correctly since then.


You may actually did complete the flashing. I recall that I was also confused for a moment and thought I bricked it, but after reboot it was alive and reporting itself as GRBL.

I recall after successful flashing and normal boot it is indeed no longer homing on power up. If so - try some GRBL control software, like LaserGRBL. Or some terminal for that matter, send $ or $$ and enter (there is no echo from GRBL, so you will type blind, unless your terminals is setup with echo).

For terminal: 115200 bod, 8n1, no flow.

Do full cold reboot: pull usb and turn power off, then back.

I deleted the original upgrade zip. I’m on a windows machine I never use so I can run that idiot software.

I tried to get any kind of response from it, but it won’t even put out a boot message. Tried it in a dumb terminal.

I think I hosed up the boot loader, it just isn’t talking…


Do you have ST Link? Or at least soldering iron to boot it into serial boot loader?

If you really hosed up your boot loader - the best way is to get yourself ST-Link/V2 clone of Amazon, about $10, and hang on for a few days. I hope I will compile proper firmware in a few days. I’m almost done, all works except PWM for spindle/laser. I’m fighting with moving TIM1 PWM from standard A8 port to B0. HAL stuff involved (“partial remapping”) and I’m trying to sort it out. If anybody can help - I would appreciate that. With some luck I will try to post my version in a few days.

One more possibility: Do you have WiFi linked up before flashing? See if WiFi still connects? Maybe try over web socket or telnet?

Never tried wifi, but I don’t see any kind of ‘new’ wifil signal …

St-link … I think I downloaded it and compiled it…

I found these…

jack@Kilo:~/stlink.git/build/Release/bin$ ls -l
total 212
-rwxrwxr-x 1 jack jack 30960 Aug  8 19:45 st-flash
-rwxrwxr-x 1 jack jack 17256 Aug  8 19:45 st-info
-rwxrwxr-x 1 jack jack 26640 Aug  8 19:45 st-trace
-rwxrwxr-x 1 jack jack 66512 Aug  8 19:45 st-util
-rwxrwxr-x 1 jack jack 23664 Aug  8 19:45 test-flash
-rwxrwxr-x 1 jack jack 17096 Aug  8 19:45 test-sg
-rwxrwxr-x 1 jack jack 17608 Aug  8 19:45 test-usb

This is the output of test-flash

jack@Kilo:~/stlink.git/build/Release/bin$ ./test-flash
[OK] (-1) 
[OK] (0) --debug --reset read test.bin 0x80000000 0x1000
[OK] (0) --debug --reset write test.bin 0x80000000
[OK] (0) --debug --freq 5k --reset write test.bin 0x80000000
[OK] (0) --debug --freq 15k --reset write test.bin 0x80000000
[OK] (0) --debug --freq=5k --reset write test.bin 0x80000000
[OK] (0) --debug --reset read test.bin 0x80000000 1000
[OK] (0) --debug --reset read test.bin 0x80000000 1k
[OK] (0) --debug --reset read test.bin 0x80000000 1M
[OK] (0) --debug --reset write test.bin 0x80000000
[OK] (0) erase
[OK] (0) --debug --reset --format=ihex write test.hex
*** Error: Expected args for this command: write <path> <addr>
[OK] (-1) --debug --reset --format=binary write test.hex
*** Error: Expected args for this command: write <path>
[OK] (-1) --debug --reset --format=ihex write test.hex 0x80000000
*** Error: Invalid value for addr
[OK] (-1) --debug --reset write test.hex sometext
[OK] (-1) --serial ABCEFF544851717867216044 erase sometext
[OK] (0) --serial ABCEFF544851717867216044 erase
[OK] (0) --serial=ABCEFF544851717867216044 erase

Clueless with these… I did install one of the IDE and loaded a stm32 grbl code, but it’s got configuration issues… Eclipse…


O boy, I’m afraid it is really messed up now.
Jack, STLink is hardware dongle to flash/debug STM32 chips. Get one if you want less painful recovery from hosed boot loader.

First tell me the truth, did you try to upload bin with some other/Linux uploader? I’ve tried to flash that BIN to Blue Pill and it never run. I did warn about that. But flashed with Uploader app to JL1 it runs - no problem.

I can try to dump the flash, if it is not locked, then it might be possible to restore. I will try and let you know.

Now, compiling from the source:
pin map is different. I have moved all pins around - no problem, except PWM . That is stubbornly non-functional on B0. Everything else, including motors, remapped with no issues.

If you managed to remap successfully, especially Spindle Speed pin - please let me know how you managed to do “partial remap” for TIM1.

Below is my map for JL1:

// Port A === Port B
// 0 X_STEP_BIT===
// 1 Y_STEP_BIT===
// 2 Z_STEP_BIT===
// 9===
// 10 === X_LIMIT_BIT
// 11 === Y_LIMIT_BIT
// 12 === Z_LIMIT_BIT

// JL1 Laser Controller
// Port A ===Port B
// 1 COOLANT_MIST_BIT (unused) === reserved (boot1)
// 2 reserved for UART2/ESP ===
// 3 reserved for UART2/ESP ===
// 7 BUTTON ===
// 8 ? === Y_STEP_BIT
// 9 reserved for UART1 === X_STEP_BIT
// 10 reserved for UART1 === reserved for UART3
// 11 X_LIMIT_BIT (USB) === eserved for UART3
// 12 Y_LIMIT_BIT (USB) ===CS eeprom
// 13 reserved (link SWDIO) === CLK eeprom
// 14 reserved (link SWCLK) ===MISO eeprom
// 15 ?===MOSI eeprom

To flash over serial - you need to strap couple pins (boot0 and boot1) and configure flasher. It also appeared that start address is missing from your command.
No cost flashing need soldering. No soldering - need STLink dongle. Well, you still need to solder 4-pin header that is missing form the board, but this is really easy.