SkyFax: A new dial-up modem that fits in your pocket

Alternative title: "I just wanted to hear some funky sounds..."

Hackaday GitHub

Let's talk about another project I did that I've been meaning to write about for a while...

So a bit ago, I was working on an electronic badge. That badge never got finished, but one of its cool features was going to be that it can connect to a phone line and send/receive faxes. I didn't want to re-do the entire board and re-route every trace every time there was a change with the modem, so it became its own separate board, and now a separate mini-project.

Component Selection

To start, I started looking around for other projects, circuits, and reference schematics. I knew I wanted a V.92, the classic 56k modem. There were a handful of resources for setting up dial-up or faxes (and technical details on how they work), but I could not find too much information on building the modem itself. I figured that they are usually pretty complicated to implement raw and usually done on a dedicated chip, mixing in digital and analog circuitry. And since I like to make most of my projects open-source, I wanted to find a chip that was readily available for most hobbyists, so:

  1. Not pulled out from another existing modem
  2. Don't need to sign NDAs for access to part + documents
  3. In stock
  4. Still actively manufactured if possible (at least in 2024)
  5. Can be obtained in single quantities (or relatively small quantities).

So I just went on DigiKey and started looking for a chip. Under DigiKey's Product Index -> Integrated Circuits (ICs) -> Interface -> Modems - ICs and Modules, there are actually plenty of products listed.

The modems section of DigiKey's catalog

I started adding filters to reduce the matches to in hopes I would find a chip I can use for this project. Firstly, part needs to be in stock (results reduced to ~116). I don't care for any of the other data formats like "Bell 202" or slower ones like V.23 (at least for this project), so selecting filters that included "V.92" reduced the matches greatly, all the way down to 8. I saw one marked "Obsolete", so I selected "Active" in the "Product Status" filter (down to 7).

Now 7 options remain

I ignored the first one (the Conexant one) because I didn't want to buy 39 of the chips I wasn't sure if it would work (and I definitely don't need that many). To find our chip, I must now look through the datasheets. From the datasheet1, I found that the Si2494 and Si2439 are basically compatible/interchangeable and the only difference is the max speed.

Chips comparison

Now, between the Si2494 and the Si2493... I don't remember why, but I went with the 94. (OOGA BOOGA HIGHER NUMBER BETTER maybe?)

Another thing I can learn from the datasheets is that the Si2494/39 is the "system-side" and there's a complimentary "line-side" component, which is the Si3018.

System Block Diagram

The typical application schematics' in there too in section 2, followed by the Bill of Materials (component values and part numbers).

System Block Diagram

I looked through the datasheet and for its features and interfaces it supports. For this project, this chip was good enough and exactly what I was looking for.

Circuit Design and Schematics

This part is relatively straight-forward, given we have the reference schematics.

System-side

The system-side (computer side) of the schematic is pretty straight-forward, even without the reference schematics.

The Si2494 supports 3 different interfaces for communicating with the host: asynchronous (UART), serial (SPI), and parallel. I chose to use the UART interface becuase it's the simplest (and the default) and I can just slap a USB-to-UART chip on there for a couple cents. I used a Silicon Labs CP2102 for the USB to UART bridge. I also added an LDO2 regulator for powering the 3.3v circuit from the 5v USB, and an EEPROM chip, so that the modem can be programmed if desired.

So it roughly looks like this:

USB Connector -> CP2102 USB-UART bridge -> Si2494 -> (to line side)
                                            v
                                           EEPROM

Line-side

The line-side (telephone side), however, is a bit more complex, utilizing mostly analog components and even some impedance control. Luckily, the AN933 goes over all that, and hopefully just using the reference schematics should get us pretty close enough for things to work properly.

I don't have much else to say for this section besides that I just went through the application note3 and hoped for the best.

KiCAD

I drew it up in KiCad4.

Schematics

Rough outline of the steps are:

  1. Add components
  2. Connect wires
  3. Label values and designators
    KiCAD has a nice little button for auto-filling in reference designators.
    For this schematic though, I tried to keep the reference designators the same as the ones provided in the datasheet, to not confuse myself later.
  4. Assign footprint for each component
    This is usually where I search and find the actual part as I go through each of the components. Sometimes the exact recommended part is not available and I need to find one that is. Most of the passives should be easy to replace, making good note of the specs required (for resistors, for example: resistance, tolerance, max power). Footprint/size is less important (as long as the part itself would work) since I'll be designing around it anyways, but I try to go for smaller parts.

KiCAD should have almost all the standard footprints, as well as for common components, but sometimes I have to get the custom footprint from online or draw them myself.

Another thing I do during this step is to create a new field/property and put the DigiKey part number into it. This makes it very easy to export the BoM (parts list) and upload to DigiKey, where it'll create a list for me with all the components and quantities parsed from it.

Bill of Materials with DigiKey field

PCB Layout

For the shape and size, not only did I want it pretty compact, I wanted it to be on a module, since the modem was supposed to be part of another bigger project. I split out the CP2102 UART chip and the RJ11 connector onto an adapter board, and the main modem module just contain the modem circuits, with the system-side exposing UART signals and line-side exposing the telephone wires. While looking for good board connectors, I thought of the M.2 connectors usually found on SSD or NVME drives. Turns out, these are actually called NGFF (Next Generation Form Factor)5 connectors, and have a couple different keying interfaces (different notch locations and pin count).

I liked the idea of using the M.2/NGFF connectors, and it would work for my case since I only need a few signals (power, ground, telephone side tip&ring, 8-ish UART serial signals) to connect to the USB adapter board.

It would have been annoying to try to rewire and match the M.2 pinout to be compatible with computer M.2 ports (especially within that small constrained area), so I just made up my own convenient pinout and put a warning label saying, "!!! DO NOT PUT INSIDE PC!!!".

Regarding the layout of the components, once again, the application note3 was VERY helpful, especially Section 4.4: Layout Guidelines. Again, I followed the guideline and the reference placement (roughly) and hoped for the best.

KiCAD

The steps for PCB layout are a bit similar to those for schematics above:

  1. Lay out the components roughly where they'll be. The white line shows what should be connected to what, so move and rotate things accordingly.
  2. Start laying out traces, moving components as needed.
    It helps to work on different "subsystems" at a time. For example, lay out the components and traces for voltage regulator circuit, and then group it together so that they move together as one and the relative position is fixed.
  3. Repeat last step?
  4. Do until satisfied.
  5. Move / resize / hide designators and value labels as needed.
  6. Create board edge and ground fill.

Optionally, you can assign 3D models. KiCAD has a built-in 3D render viewer6. If KiCAD's default libraries do not have a model for your components, you may have to source the 3D models online (either another KiCAD library or step/wrl file) or draw one yourself.

v4.0 3D Render

PCB Fabrication

Sometimes, for simpler projects or prototypes I don't want to wait for, I make the boards at home, which takes a few hours compared to a few days + shipping. See my other post describing the process.

Usually though, if I have more time and don't mind waiting, I send off the design to a fab where they'll make the pretty boards, with soldermask and everything. I usually go to JLCPCB because they are pretty cheap, and since their (expanding) capabilities are enough for most of my projects. There are other fabs too; many in the US as well.

But before I produce the manufacturing files, I need to ensure that design constraints are met and also that the manufacturer (in this case, JLCPCB) can actually produce it (trace gaps, trace width, minimum tolerances, etc). In KiCAD, you can enter design rule constraints (both electrical and board) and run checks. You can find the fab's capabilities on their site. For JLC: here.

Once that's all done and rule checks are passing, I can export the gerbers and upload.

Assembly

After I've uploaded and JLCPCB has verified my design, it will go into production. I've also ordered the components at the same time.

After waiting a week or so, I have the boards in my hands, and all the components I need to populate it. So I get to soldering.

I soldered the USB UART chip (CP2102) first, along with all the components to power and operate it (resistors, connectors, etc), since it's the easiest to test. Connect the RX and the TX pin together, and type things into minicom(1)7 (see below for basic tests using minicom). If it's working properly, whatever I typed should go out to TX, back into RX, and show up on the screen.

Next, the main modem chip (Si2494) and its supporting components. We can't do any real modem stuff yet since the line side is not populated. Connect it back up to minicom and type in AT<enter>. If it responds OK, then it is working correctly.

I can now finish up the rest of the board and fully test the modem.

The version 2 did not have its own UART bridge, so I used the evaluation board. After everything was soldered, I replaced the modem module with the one I built. Here's a screenshot of a video I took while testing the version 2:

Testing the v2

It didnt work immediately, so I disconnected the capacitors between the system and line sides on my module and the reference module. I tested my system side with the reference line-side circuit and vice-versa. This was a while ago, so I don't quite remember what was wrong.

After that, I drafted up version 3, sent it over to the fab, and repeated the process. You can see below that the version 3 (the long one) has a row of jumpers (J4) near the modem chip (U1) towards the left side. That allowed me to easily probe and also disconnect the UART circuit so I could use a different, working, UART USB bridge (or the evaluation board) for testing.

Version 4 separated out the adapter board and the modem circuits. Here are some pictures of the v3 and v4 module after being assembled:

Soldering the v3 Soldering the v4

Final Build

Once everything was put together, it came out to look like this:

v4.1

I also had some time and was bored, so I designed a case for it:

Case Render

The 3D model of the modem module + USB adapter board was exported from KiCAD and imported into OnShape, giving me reference shapes and dimensions to design around. It was then 3D printed. The text part was extruded inwards to create a "well" where it can be filled with some polyurethane resin.

Case Printed

Using the Modem

I do not have an active landline at my place (although now, I have set up an internal retro network).

Luckily, I do have an old telephone line simulator.

Teltone TLS-5

You can connect phones and devices to the different ports and dial each other with the numbers written on them. So after building two of the modems, connecting them to 101 and 102, I hooked them both up to my machine and opened up the serial terminal using minicom(1)7.

Here, the left side is the modem connected to 101, and the right 102.

The modem can be configured using AT commands listed in Tables 10 and 11 of the datasheet, as well as the AN933.

AT Commands

Audio Module

Version 3 adds a header for an optional audio module. There are also schematics and PCB layout for this in the project files, under SoundCard/.

Audio Module Rendered Audio Module

Without a Line Simulator

If you don't have a working landline nor a line simulator, you can connect two modems using this simple circuit instead8:

Line Sim

There are other variations of this circuit available online, but I found this one to work for me and this setup. The voltage and resistance can be tweaked to provide ~20mA of current with the modem/phone off-hook.

There are also schematics and PCB layout for this in the project files, under LineSim/.

Fax?

Oh, I finished the project and was really excited to test the dial-up (data) mode, which worked.

But going back to the original purpose, which was to provide fax capabilities to an electronic badge, I found that this chip (the Si2494) does not support fax mode...

There was another chip that was compatible (like, just drop-in replacement) that did support fax mode, but going back on DigiKey and looking for it, it seems like it wasn't actively being maufactured nor in stock anywhere.

No Fax Modems

Well, no fax for this module I guess.

Cheers
73,
-B

  1. Skyworks Si2494-39 V.92 and V.34 ISOModem with Global DAA ↩

  2. A Low-Dropout Regulator (LDO) is a linear voltage regulator that maintains a stable output voltage even when the input voltage is very close to the desired output. ↩

  3. Skyworks Application Note 93 Si2493/57/34/15/04 (Revisions D and D1) and Si2494/39 (Revisions A and A1) Modem Designer’s Guide ↩ ↩2 ↩3 ↩4

  4. KiCAD is an open-source PCB design and electronics CAD software. I really like it and in the recent couple of years, has gotten really good and is even starting to catch up on features previously only available to those on paid, commercial software. ↩

  5. https://en.wikipedia.org/wiki/NGFF (redirects to M.2) ↩

  6. https://www.kicad.org/discover/3dviewer/ ↩

  7. minicom - friendly serial communication program. ↩ ↩2

  8. I found this and that resources to be helpful to connect two modems together without a proper telephone line. ↩