@ryanc Are you trying to do it in-situ, or did you remove the IC from the board? If it's on the board still, what have you tried? ... e.g: have you tried powering it and holding the main processor in reset (if you can find that signal)
@ryanc Yeah, totally valid imo! I've taken this route with some commercial projects - just allocate a chunk of space and patch in the config on the production line.
@ryanc@kkarhan Is there no support for using environment variables(?!) ... put the secrets into a .gitignore'd *.env file (or CI variables)... or use the same to produce a header as a pre-build step.
The 32-bit CRC used by Quectel's AT+QFCRC command is a mystery, and there are a handful of unresolved posts on their support forums. I have no idea why this seems to be guarded and isn't in the manual.
So here you go, in case anyone was looking. It seems to be a non-standard configuration of the common polynomial (i.e: Ethernet, Gzip, etc...)
... needless to say, two carefully inserted nop instrutions (4 bytes), make everything outside the immediate vicinity align with the "good" sample, and cause the "broken" version to work fine... 😭
This *stinks* of an issue I had a while ago, needing an extra wait-state... the processor was near the edge of a voltage-defined boundary declared by the manufacturer.
tmux paired with a quick script is paying dividends here.
1. Send keystrokes to GDB to restart the firmware 2. Wait 45 seconds 3. Look at the last line from the console output 4. If it looks bad, then flag a failure 5. Repeat
Ok, just one nop works - another is inserted at the end of the function for word alignment purposes. (i.e: I give 1x nop, the compiler gives me 1x nop for free... I give 2x nops, the compiler gives zero)
The works / broken behaviour phases in and out over 32-bit / 1 word steps... and the behaviour is the same all the way through.
+0 words -> broken +1 word -> works +2 words -> broken +3 words -> works +4 words -> broken etc...
Now I wonder if it's "just" a matter of inserting a 1-word shift into the program somewhere between this function and the end of the binary, to deduce which symbol actually houses the issue... (GROAN 😑)
Here's the plan... there are are 1,244 symbols from "here" until the end of the binary... time for a bisect!
I'm going to pick a midway point, insert a one-word shift into the following code (i.e: one or two nop instructions), and re-test... 6 runs without failure is a pass (shift the bisect point 50% towards the end), otherwise it's a failure (shift the bisect point 50% towards the start).
Join me, while I disassemble a 100BASE-ZX SFP module (1550nm, 80km)
Surprisingly, these appear to be quite happy running at 1Gbit/s over ~3m of fiber! The reported Rx power doesn't even saturate for the FS.com modules (though it does for the Startech module)
Oh: sorry for the bad photos... I wanted to share, but also couldn't be bothered to get the better camera (and my phone camera is terrible).
Once in a while I poke my nose into birbsite... today it was worth it just for this.
What an excellent idea, and fantastic execution.
---
My grandpa who is 85 started making this rock map of Scotland in 1992.He collected rocks during amateur geology trips over 30 years. He says it had to be geologically correct and also aesthetically pleasing.He asked if I could share online as He wants to go viral so please share.
@n3wjack It's a split for me - my monitors are connected to a Windows PC, partly out of familiarity, but largely for software like Office, Altium & Solidworks... that said, I virtually always have one or more SSH connections to a more powerful Linux system, where nearly *all* the rest of my activities are carried out.
Every time I accidentally see these, I read far enough to see things like "you should be spending 30% of your income on [wants]" and have an urge to flip the table over.