View on GitHub

Quorten Blog 1

First blog for all Quorten's blog-like writings

Okay, my first experience using FreeCAD, I’ll just run it on Raspberry Pi 4 like I do any computer, right? Wrong! I install it, it starts up okay, but then when I am about to open any 3D model, it crashes! Why? Well, apparently it had a long history of not working on any Raspberry Pi version, but never fear, there is now a way to make it work on Raspberry Pi 4. You just have to… compile the latest version of the package yourself.

20201027/DuckDuckGo freecad raspberry pi crashes
20201027/https://scruss.com/blog/2020/02/16/freecad-on-raspberry-pi-4/

Looking for info on the extended features of the SWIM? Look here! This should really cover every additional feature you need to know to reimplement it, then it’s just a matter of connecting the hardware and software together.

20201026/https://web.archive.org/web/20131106030115/https://dec8.info/Apple/Apple%20Floppy%20Notes/SWIM%20Chip%20User’s%20Ref.pdf

I found this from a link to a Macintosh Portable schematics reverse engineering project, here:

20201026/https://github.com/ppieczul/macintosh-portable

My past great article about what I found out happening to the GPIO pins on RESET? I was… only partially right. Some of the information turned out to be time-sensitive and has changed.

NOTE: My discussion in the old blog post.

So, let’s get this straight. The BCM2835 has a default power-on state where all GPIOs are configured as inputs. Although pull-ups are maintained in their past state even in power-down, on the next power-on, they are reset to the defaults. GPIOs 0-8 are configured as pull-up inputs and GPIOs 9-27 are configured as pull-down inputs. Then when the Raspberry Pi bootloader comes up, it initializes the pins to the default values in its Device Tree configuration. There is about one second of time between the initial reset and the first GPIO reconfiguration actions. Finally, after the Linux kernel finishes booting and loading the system, your own code will have full control.

In old versions of the Raspbian and bootloader software, the early boot environment configured the GPIO pins as high-impedance inputs without any pull up/down. This was responsible for the observed behavior of an output flicker on the GPIO ports, it was actually just a flicker of a pull-down resistor being applied and then removed. Current Raspbian and bootloader versions now set the bootloader initial value to the hardware initial value to eliminate this flicker.

Read on →

box86, a faster way to emulate x86 on Raspberry Pi. The trick it touts for faster emulation is translation that it uses native API function replacements whenever possible. Well, that’s just like UltraHLE for Nintendo 64 emulation.

20201025/DuckDuckGo which emulation is faster dosbox or qemu arm
20201025/DuckDuckGo fastest x86 emulation on raspberry pi
20201025/https://www.tomshardware.com/how-to/raspberry-pi-install-steam
20201025/https://github.com/ptitSeb/box86

Old inkjet printer out of ink? Beware that your cartridges may have been discontinued by the manufacturer. Save your cartridges and refill, that is the best aftermarket option to keep running! Here are my notes for my own vintage inkjet printer, the EPSON Stylus Color 640.

20201023/DuckDuckGo epson stylus color 640
20201023/https://epson.com/For-Work/Printers/Inkjet/Epson-Stylus-Color-640-Ink-Jet-Printer/p/C256001
20201023/https://epson.com/i/C256001
20201023/https://refillbay.com/inkjet-printer-refills/epson-stylus-color-640.php
20201023/https://refillbay.com/product/injector-kit-for-inkjet-cartridge-refills.php
20201023/https://refillbay.com/product/cleaner-for-inkjet-cartridges-60-ml.php
20201023/https://refillbay.com/product/inkjet-refill-kit-for-4-color-printers.php

If you want high-speed communications on a parallel port, you need proper termination. But what is the circuit anyways? Searching around, I found a device with a datasheet, or at least I thought I did…

So, the essentials of proper termination? Provide pull-up resistors for proper open collector signaling. Besides that, you can also provide EF protection diodes and an RF filter (resistor and capacitor to filter out radio frequencies). That’s all the info I could find, nothing about using resistors to terminate the lines at their characteristic impedance.

20201022/DuckDuckGo parallel port bus termination resistors
20201022/https://resources.pcb.cadence.com/blog/termination-resistors-in-pcb-design
20201022/DuckDuckGo ieee 1284 termination impedance
20201022/https://www.vishay.com/docs/60089/vssx1284.pdf

UPDATE 2024-10-20: According to this datasheet, IEEE 1284 termination is specified to be mostly ESD protection circuits, except on the STROBE control line and the eight DATA lines. Those have a series termination resistor at 33 ohms. This is comparable to the series termination resistors found inside the original Macintosh computer’s motherboard DRAM lines.

20241020/DuckDuckGo parallel port termination
20241020/https://www.onsemi.com/pdf/datasheet/pacsz1284-d.pdf
https://media.digikey.com/pdf/Data%20Sheets/ST%20Microelectronics%20PDFS/ST1284-xxA8.pdf

Otherwise, there’s always just the random guess, a resistor around 100 ohms. 120 ohms, 90 ohms, 70 ohms, oh something like that.

OKAY, fine, the final verdict answer. Because IEEE 1284 cables are single-ended with ground wires in between, rather than differential cables, the characteristic impedance is 90 ohms, not 120 ohms or greater as is the case with differential cables. Yeah, it’s not really good data and insight, but that’s the best I can fathom. In addition, the fact that many parallel port devices are not connected with precisely impedance-matched cables.

Read on →

Okay, so I found out that pi-parport does not have the EEPROM configured to automatically load the device tree overlay. Let’s figure out how to make this enhancement.

Simple, you modify the EEPROM build commany line to include a file containing the contents or name of the overlay file as a third command line parameter.

eepmake board.txt board.eep overlay_name.txt

In my case, the name is parport-gpio, this instructs the system to load the /boot/overlays/parport-gpio.dtbo file.

20201021/DuckDuckGo raspberry pi hat eeprom automatically load dtoverlay
20201021/https://www.raspberrypi.org/documentation/configuration/device-tree.md
20201021/DuckDuckGo raspberry pi hat eeprom fields
20201021/https://github.com/raspberrypi/hats/blob/master/eeprom-format.md
20201021/https://github.com/raspberrypi/hats/blob/master/devicetree-guide.md

Okay, but I’m still having trouble, what did I do wrong? I see that the i2c-dev is indeed loaded, so that should not be an issue. How can I debug the kernel device tree? Like this.

Read on →

Is there any info online for Raspberry Pi Zero short between 3.3 V and ground? No, but we’re seeing similar reports for Raspberry Pi 3, the custom PMIC for it fails to have sufficient robustness in this respect. This unfortunately happened to me due to a soldering error on a Raspberry Pi Zero, that board is now toast.

20201021/raspberry pi zero short between 3.3 and ground
20201021/https://hackaday.com/2019/06/12/shorting-pins-on-a-raspberry-pi-is-a-bad-idea-pmic-failures-under-investigation/

Wow, Raspberry Pi 4 Compute Module? Now that is really interesting! It allows you to get PCIe onto your own connector! Although, you can hack a Raspberry Pi 4 to get the PCIe connector by forfeiting USB 3.

20201021/https://hackaday.com/2020/10/19/new-raspberry-pi-4-compute-module-so-long-so-dimm-hello-pcie/
20201021/https://hackaday.com/2019/07/10/giving-the-pi-4-pci-express/

Wow, these are some interesting Hackaday articles. Hand-soldering a BGA package using tombstone resistors, another way hand-soldering directly to the solder balls, and an old PDP-11 on a chip! How did the PDP-11 make its way to chips? It was one of the last failed products that came out of DEC in attempts to gain a modern market presence, that’s how.

Read on →

Some nice crystal oscillator datasheets I’ve read has some important warnings on reflow soldering with quartz crystal oscillators.

20201019/https://abracon.com/Resonators/AB26TRB.pdf
20201019/https://cfd.citizen.co.jp/english/wp-content/themes/cfd/dist/pdf/datasheet_TF/CFS-206_CFS-145_E.pdf
20201019/https://abracon.com/Resonators/AB26T.pdf
20201019/https://ecsxtal.com/store/pdf/ECS-3x8X%202x6X%201X5X.pdf

Not all crystals are created equally. In particular, crystals with leads may not be designed to handle the thermal stresses of reflow soldering. Doing so may cause the crystal to warp and no longer be within its rated timing specifications. For leaded crystals, check that it is rated as reflowable or has a diagram of a reflow soldering temperature profile in the datasheet before attempting to assemble via reflow soldering. Otherwise, you should hand-solder for safety.

Another note is that even if the crystal is designed for reflow soldering, you can only subject the crystal to reflow soldering a limited number of times before it falls out of specification. Generally this is a small number like 2-3 times.

Read on →

I might have learned a bit about this in my computer architecture class, but just to be sure that I wasn’t learning about the too new stuff, I’ll do a web search on the subject. How do you use the row accwess strobe and column access strobe on an old school DRAM? Easy.

  1. Send row access strobe first with the row address.
  2. Send column access strobe second with the column address.
  3. You can now read/write the memory.
  4. You must periodically refresh the DRAM by reading every single row of DRAM.

What about write-enable? Well, I’m guessing just start driving that value before you send the row access strobe and after you’ve finished writing. Once you release the write-enable, the newly written value will get propagated to the DRAM, or at least the row buffer.

20201018/DuckDuckGo dram row access strobe column access strobe
20201018/https://my.eng.utah.edu/~cs6810/pres/12-6810-15c.pdf