Welcome to the (Not Quite) Frequently Asked Questions page. In here, I have tried to include answers to all that you ‘d like to know about this project (but, at least some of you were reluctant to ask — hence the “Not Quite” in my NQ-FAQ 🙂 ).

  • What is Open USB FXS? Open USB FXS is an open-hardware project that aims at producing a low-cost USB telephone adapter board.
  • What is the current status of the project? As of April 2010, the status is as follows: Hardwarewise, there are two boards that have been produced, a large-form and a “dongle”. I have produced working prototypes in both forms, however the latest tested dongle version has some heat issues and a redesigned version has been produced and is to be tested soon. The board’s firmware has been shown to work OK as well. Latest add-ons and patches allow piggybacking of DTMF and hook state samples onto IN packets, as well as piggybacking register-setting commands on the OUT packet stream. A latest fix also allows transparent clock alignment between the board and the USB host controller.  A demo driver program for Windows (XP, Vista, etc.) is available that allows simple control of the board. A Linux kernel driver has been produced that allows manipulating the board with simple open(), read(), write() and ioctl() instructions from userspace programs. Finally, a second Linux kernel driver is being finalized, which ties the board to the dahdi (ex-zaptel) driver platform from Digium, allowing the board to work with Asterisk. As of now (April 27 2010), this dahdi-compatible driver still needs some testing and improvements and is going to be published soon.
  • Is Open USB FXS (going to be) working with Windows or Skype? No, not yet. Windows interworking is at user-level and just for testing purposes and there is no kernel driver (yet). Although the current orientation of the project is for Asterisk, there is nothing that precludes Open USB FXS to work under Windows. So, if you are interested in developing a Windows driver, please contact me.
  • Where is the source? In the project’s Google Code page. To just browse through the code, it, go to Source -> Browse. To use/compile/etc., you ‘d better use an SVN client and checkout the code. The SVN trunk part contains the Eagle source files, the PIC firmware and USB boot loader source and binaries, the source for the Windows command-line console test program and the native Linux kernel driver. The dahdi-compatible Linux driver is to be published soon. The SVN tags part contains an older (devel0.0) version of all the above minus the Linux drivers frozen as to work together; it contains also GUI versions of the Windows test program.
  • What is the license for Open USB FXS? There are two licensed items: this blog, including any “tutorial” material that it contains, and the source code. They are both licensed by free/open-source licenses. The blog and accompanying material (schematics, diagrams, explanations, etc.) are licensed under the Creative Commons license. The source is licensed under GPLv3.
  • What do these licenses mean anyway? The CC license means that you are free to use, adapt, print, etc. the material contained in this blog if you deem it is useful, provided that you attribute the work to its author (yes, this is me) and include a reference to the original work (e.g., a URL). The GPLv3 license is more complicated, but essentially it means that you can do lots of things with the source (use it, copy it, reproduce it, even sell it if you like) but you have to provide reference to the original source and your code has to remain free and open: you cannot “close” the code and sell it as closed-source software. The Open USB FXS source is and has to remain free/open-source.
  • Is Open USB FXS a product? Strictly speaking, no, not yet. I am looking to get a relatively decent number of boards (and kits, see next item) produced, so you might be able to order yourself a board in a month or two (say, about the end of May 2010.
  • Where can I buy a ready-made board/a DIY kit/a PCB/materials? I am in the process of making a limited number of ready-made boards or PCBs and DIY kits available at the bare price of materials (plus assembly and testing costs, for ready boards) to anyone who is interested in contributing to the project [“contributing” does not necessarily mean write firmware or kernel driver code; one might just as well try the board in different environments and report bugs or other issues back to me]. Soon thereafter, boards can be mass-produced (well, “mass” might be just one or a few hundred, at the time…) and be made available for ordering for non-developers as well.
  • I am interested in finding a ready USB FXS ATA product. There are quite a few USB ATAs out there. Their cost varies from a few tens to the order of one hundred dollars, depending mainly on whether you shop directly from China where they are all built nowadays. I cannot provide a list here; do your own market research.
  • Can I use Open USB FXS in my own project? Sure, that’s perfectly OK. However, I have received some (“lots of” is not exactly correct) requests that show some mis-guidance: if you are about to make a hardware project of your own, perhaps re-designing the whole thing from scratch is better than trying to copy this project into your own. Perhaps if you are building a whole-new project you don’t need USB at all. Open USB FXS contains lots of USB-specific quirks, that you might avoid if you do not really need USB.
  • Can I contribute to the Open USB FXS project? Yes! Sure you can! You can do lots of things and here is a list with some ideas. (1) You can try to improve the design in many ways without really departing from it; this would mean, design a better PCB, design a variant, e.g., with transistors instead of  the costly Si3201, or with the more efficient MOSFET-based DC-DC converter. (2) You can try to come up with an augmented design, e.g. add a FXO port (this would require one additional Silabs chip, a bistable relay and circuitry to control it and a good quantity of magic trickery to get the PIC to control all of these). (3) You can just try to build a board and contribute to the development of the source code (that is, the kernel and Asterisk channel drivers) this is actually where I am seeking some active help these days.
  • How can I contact you about getting some advice, contributing to the project, propose ideas, or for any other matter? If you have never contacted me before, you can post a comment to this blog. All comments are moderated, so you may note in the comment text that you wish to contact me without worrying about your comment going public immediately.

Please help me turn this NQ-FAQ into a FAQ by just asking more frequently your questions! 🙂


19 Responses to “NQ-FAQ”

  1. Denver Abrahams Says:

    Hi, Angelos,

    Do you etch the PCBs yourself, or is a company making them? If you are etching them yourself, could you please publish your method of etching?

    Hoping to hear from you soon.



  2. Angelos Varvitsiotis Says:

    Hi Denver,

    There are two answers to this question. The easy answer is “a professional PCB service company makes my PCBs”. The more elaborate answer is that, when I first started the project, I fell for the concept of a 100% do-it-at-home-doable project, PCB etching included. So, I etched some PCBs myself, as I explain in my “Damn tiny thin copper stripes” post (you can find some details there about the method I used, but feel free to ask if I have left any gaps). However, manual etching is a one-piece-at-a-time procedure, so when I trashed that PCB (the tiny pads around 3210 went off the board because of too many soldering-unsoldering while trying to get that board working), it felt more reasonable to resort to the virtues of a professional PCB store. The board shown in the post is the one I etched myself. Maybe I need to publish a pro-made version to show how different it looks (not much, actually). After all this discussion, if you are interested in getting your hands onto an Open USB FXS board, I ‘d suggest you order one (or a couple) from a professional store; it would save you lots and lots of trouble.



  3. Denver Abrahams Says:

    Hi Angelos,

    I strongly agree that having the boards made by a professional board shop makes a lot of sense as it saves a lot of time and effort. Board shops are a bit on the expensive side though here in my neck of the woods (Cape Town, South Africa). So I’ll start off by etching them myself, but I find the photo synthesis method to be too delicate and time-consuming. I did some research and settled for the Tom Gootee Toner Transfer Method which can be found at http://www.fullnet.com/~tomg/gooteepc.htm. Weekend Projects made a video demonstrating this method (no link unfortunately 😦 …) which can be found on YouTube. As soon as I have a finished board I’ll send you some pics.



  4. Angelos Varvitsiotis Says:

    Hi Denver,

    Accidentally, I had heard of Tom’s web page before. It’s OK if you want to try it; I have not done so myself, because I am very bad at ironing (I have had to say goodbye to several of my clothes thanks to my ironing skills :-)). Seriously now, Tom reports his thinner trace is about 0.3 mm; the pads of the 3210 and most other thin traces are about 0.25 mm, and I hope this is going to work with his method.

    Since you are going to etch a double-sided PCB, it’s important that you align the two sides (almost) perfectly well. My way of doing that was to first drill the three cornerside holes using a scrap printout as a guide and then use the holes as guides for PCB placement.

    Since you seem determined to build your own board, please take the following notes as well.
    1. It’s best to use the patched Eagle PCB version (it’s on Google Code). The unpatched version will require you to solder by hand a thin wire on pin 2 of the 3210, which is not the easiest thing to do. I have not produced PDFs of the patched version, though. Please email me if you need these. Please do also use the latest schematic and BOM from the Google Code site: the ones on WordPress.com are consistent with the then-contents of the relevant posts, but contain some mistakes which are fixed on Google Code.
    2. All my prototype boards seem to suffer to various degrees from weird hardware glitches (not the same on all boards, though). There are two things I still need to do: (a) replace selected capacitors with high-voltage ones (the original ones I got had no voltage rating, so I could not be sure about this, and some problems, like clicking sounds, are very likely to come from insufficient-voltage-rated capacitors occasionally discharging under some 40 or 60V) — make sure your capacitors are rated correctly; and, (b) test how replacing the 100uH shielded choke with a 150uH one works (the 150uH choke is assumed to be more energy-efficient, and, although it’s discouraged for Vdc=5V, it is listed in Silabs’ Excel worksheet as a supported alternative with 5V Vdc, so trying that out is maybe worth it). Notice that a 150 uH choke requires a R17 value of 480 ohms (theoretically — even 470 will do, I guess).
    4. Take very good care of soldering “via”s, especially under the 3210. Nothing must protrude over the top surface of the board, otherwise the 3210 will not sit well on its soldering pads. More than 80% of the problems I have dealt with in my prototypes were due to bad solderwork on 3210’s pins.
    5. Make sure to carefully remove all soldering paste leftovers from the board, especially around the 3210 (with all these solvents you ‘ll have gathered from the etching process, this is going to be no problem :-)).

    Please note that I am currently working on a “dongle” PCB version for my circut, which is going to be much, much smaller (60 x 30 mm) — and cheaper to produce. Even so, the existing published PCB version is far better for prototyping, since it allows you easy access to all components, should you need to test signals, check soldering or even replace components that you suspect have failed.

    Please don’t forget to keep me up-to-date with your progress. Feel free to contact me in private if you prefer for any assistance that you might require (my email is on the previous reply of mine). I wish you the best of luck with building your own Open USB FXS!



  5. Denver Abrahams Says:

    Hi Angelos,

    All points taken . . . and greatly appreciated, thank you

    They say the only stupid question is the one you don’t ask, so if any of my questions sound stupid at any given time, it’s because I’m a total novice at what I’m about to attempt. I have never done anything like this, not etched a board or designed a circuit, let alone attempting anything of this magnitude ( . . . well, it is a huge project, at least for me . . .) so any advice is welcome.

    I also want to thank you for offering your private email. I might take you up on that offer at some point in the future, but for now I want to keep my questions in the open so everyone benefits.

    Talking about questions, I do have one more: how easy, or difficult for that matter, will it be to replace the USB with Ethernet since that is what I really need. As you may know, USB (excluding USB3) has a distance/length limitation which doesn’t pose a problem in an office environment, but becomes one when distances greater then 3 meters need to be covered.

    The Mesh Potato seems to be the answer, but this eliminates the need for everyone to connect to the central server. For what I have in mind I do need everyone to connect to the central Asterisk server though, so any advice or comment on adding Ethernet as opposed to USB will be greatly appreciated.



    P.S. The closest I came to anything like this was building a LIRC (http://www.lirc.org) receiver for my PC on a bread board, and, designing the circuitry on paper since the receiver they use were no longer available in South Africa and the circuit layout had to change as a result. So I’m not that bad I guess . . . 😉

  6. Angelos Varvitsiotis Says:

    Hi Denver,

    I am not sure I understand what you have in mind. There are plenty of Ethernet-based ATA (analogue telephone adapter) devices out there, and some sell really cheap. However, all these, just like a mesh potato node, are complete independent VoIP systems, with their own SIP stack. There are even ready-made wireless phone sets with a SIP stack and 802.11. I am definitely sure that you can serve your purposes with these, however, what you say you need is a “stupid” device, that will not talk SIP, but will rather implement just the RTP (audio) part and rely on Asterisk for all the rest. I do not know of any such device off the top of my head, but maybe one exists; you should do your own research on that.

    It seems to me that you would have many issues to resolve with a device like that. You would have to make it smart enough to adapt to a varying IP environment (e.g., ask for its own IP address, default gateway and domain name servers over DHCP). Then, you would have to somehow configure the device’s idea of what the Asterisk server’s IP address is (ATAs usually do this by means of a DTMF menu over the phone, or over Ethernet via a tiny webserver running on the device itself, or via both methods). You would also need some flash to save these settings. After this, you would need to have the device talk to the Asterisk server, announce its existence (e.g., send some form of a “hello” packet to tell the server that it is alive) and make sure that it is seen by the server (e.g., wait for a hello packet from the server). You would need to resolve all sorts of things related to privacy, security, etc. (e.g., make sure that it is hard for someone else to hijack a telephone call session, or falsely tear it down, etc.). Besides that, Ethernet (without PoE) will not provide power to your device, so you ‘d need a power source as well. Finally, you would have to somehow substitute the signaling part of SIP with some sort of signaling of your own between asterisk and your device that the latter would understand (e.g., ring the phone set, get hook status, etc.). Signaling would have to work in parallel with audio (e.g., to let the server know that the user hung up in the middle of a call).

    All this seems to me like you would have to rewrite 75% of the functionality of a SIP stack from scratch on your own. It would be an enormous effort. You see, many of the above issues (power, device addressing, identification, security, signaling etc.) are already solved on a USB bus; however, you need to handle them from scratch when you work over Ethernet and IP. That’s exactly what DHCP, TCP/IP and SIP (or the older H.323) are all about.

    If, after all, this is really what you have in mind, you need to choose a microprocessor that will talk Ethernet. You may check some Ethernet-ready PIC microprocessor (e.g., an 8-bit version in the 18F series or something larger) or other manufacturers’ products (there are many).

    Still I am not sure I understand your application. Wherever a wired Ethernet can go, a 2-wire twisted cable can go too. With the current Open USB FXS settings you might just as well draw a cable from the board to a phone set up to 2000 feet away; it can go even farther if you fiddle with the settings (note: if the phone line traverses any open space, you need to add a surge protector to the circuit to keep it — and yourself — safe). However, you seem to imply that you need a wireless connection (e.g., infrared or 802.11). Why is that? How about trying to describe your app a little bit more in detail?

  7. Denver Abrahams Says:

    Hi Angelos,

    If anything I wrote was unclear or misleading, then I apologize, please forgive me.

    I am well aware of really cheap ATA devices available, but in South Africa, even the cheapest ones are too expensive for the communities I need to supply them to, unless of course, I buy them in the thousands. Expensive country I live in.

    For what I need, your Open USB FXS will do just fine, and, you are absolutely right about the 2-wire twisted cable. How silly of me to worry about USB cable length when I will never need it.

    As for a description of my app, it’s jacking a standard telephone into an FXS and have it controlled by an Asterisk channel driver, exactly what your Open USB FXS was designed for, so that’s just about solved and I have you to thank for that. And, as for the infrared device I mentioned in the P.S., that was just to highlight my inexperience in board-building and, to emphasize all the help I may need, in a humorous way.

    I hope this clears things up and I do have another question: Has the device been tested with Asterisk or some other PBX software, and, what was the results?


  8. Angelos Varvitsiotis Says:

    Hi Denver,

    Has the device been tested with Asterisk or some other PBX software, and, what was the results?

    No, I still have to write the Asterisk channel driver for that. Before that, I need to get the hardware stable (cf. the unrated voltage capacitor discussion in my earlier replies). Once I do that, I don’t expect many unpleasant surprises with the channel driver. Even though I expect a single Open USB FXS device to work fine with Asterisk, a good question is how well will my device driver perform with many Open USB FXS devices attached to the same machine (and what an upper limit for that “many devices” is). I will write the channel driver sooner or later (rather sooner than later), by adapting David’s chan_mp driver, and of course I am going to post on this.



  9. Brecht Van Wanseele Says:


    I’m a student and i’m making this as a project this semester.
    I got the print and programmed pic from elektor, and got windows to see there was something connected but not recognized.
    I stored it in a paper towel and box to protect it when I took it to school, there nothing worked anymore. The crystal works and everything is well soldered.
    Could the pic be broken by static electricity ore what else could be the problem ?

    kind regards,

    Brecht Van Wanseele

  10. Angelos Varvitsiotis Says:

    Hi Brecht,

    Thanks for your interest in the Open USB FXS project!

    Did you use the same Windows machine at home and at school? If not, then why not test again with your home machine (or whatever else it was that recognized your board the first time)? If it’s the same machine (or if you took it back home and it proved to be dead there as well), and although I am totally unable to perform remote debugging, I would suggest that you do a couple of electrical tests using a multimeter. I do not think that you have burnt the PIC because of static — unless you were wandering under a thunderstorm or through a high-energy electrostatic field with your backpack and the board therein. The most probable cause is that your board underwent a good mechanical shock during its trip to school and this moved a loose contact somewhere. Do also mind the position of S1a and S1b. The first time through, S1b (the one facing the USB plug) must be turned ON in order to invoke the boot loader, which will let you install the application (FXS) firmware.

    You ‘l find lots and lots of debugging information and suggestions in https://openusbfxs.wordpress.com/dyi-setup-and-debugging-guide/. Please do not hesitate to ask for more help if the above suggestions do not help you.

    I wish you good luck with your school project!


  11. Brecht Van Wanseele Says:

    Hi Angelos,

    I made a second board and programmed the PIC, I got windows to recognize that somethings connected and in with linux the light is flashing. But windows says that the wright drivers aren’t installed.
    I installed the MCHPFSUSB framework and rebooted, I even did this on a windows 7 and windows xp computer.

    Are there others settings I have to change or are there other drivers i have to install ?

    Thanks in advance,

    Brecht Van Wanseele

  12. Angelos Varvitsiotis Says:

    Hi Brecht,

    If your new board is flashing its LED at a frequency of ~1Hz under Linux, this means it works (as far as the USB part is concerned). You have to go on with setting up your Linux machine with the oufxs driver. See the debugging guide and the “Setting up your Linux environment” for more on how to do this.

    Under Windows, if you switch S1(b) (see my previous reply to you) to the ON position, and plug the board in, it will operate in PICDEM-FS mode; in that mode, your Windows should recognise this as a FSUSB demo board. When this is done, you can upload the latest FXS firmware (which you can get from here) on the PIC using the PICDEM FS utility that comes with MCHPFSUSB (see the debugging guide on this blog for more information). When you finish with flashing, take off the board and switch S1(b) back to the OFF position; when you replug, the board will be running in FXS mode. In FXS mode, Windows will not recognise the device as a known one, because it does not know of any drivers for it. From that point on, you must continue with Linux. So there is nothing more to do under Windows, unless you want to experiment with some very old versions of software that I wrote for Windows (which do not provide full telephony functionality — in that case, please mail me in private).

    Good luck with your project!


  13. Ali Says:

    Hi Angelos,
    I recently ordered and assembled a DIY kit.
    Under windows the pc recognizes that an unkown device is connected with s2 on but the mchpfsusb bootloader does not show any IC in the drop down selection box….i have checked all connections and checked board thoroughly what should i do ?


  14. Angelos Varvitsiotis Says:

    Hi Ali,

    Thanks for your question. Have you installed the Microchip driver that comes in with MCHPFSUSB? You should be able to find it somewhere in C:\MCHPFSUSB\Pc\MCHPUSB Driver\. In Windows, “My Computer”->(right-click)->Manage->Device Manager, the “Universal Serial Bus Controllers” tree branch on the right pane will show you the connected USB devices and their driver. It will also tell you if a device is unknown. You should not expect MCHPFSUSB to work if Windows cannot recognize Open USB FXS (in bootloader mode) as a known USB device, and you should not expect Windows to know about it unless you have installed Microchip’s drivers.

    Please let me know if I can be of more help.



  15. Ali Says:

    Hi Angelos,
    Thanx for ur reply……but i need some more help……i cant find the drive…..what should i do….

  16. Angelos Varvitsiotis Says:

    Hi Ali,

    (I have replied in private, but I think the reply is of interest to other people, too, so here it is): Unfortunately, I have given the wrong information in my previous comment about the location of the driver. The correct location is in “\Microchip Solutions\USB Device – MCHPUSB – Generic Driver Demo\Driver and inf”. In my installation, this is “C:\Program Files\Microchip\Microchip Solutions\USB Device – MCHPUSB – Generic Driver Demo\Driver and inf”, but the location of the top folder may differ. Note that this holds for the version 2.2 of the MCHPFSUSB framework, which you can find here http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx?device=en021940&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en021940&part=DM163025#.



  17. Ali Says:

    Hi Angelos,
    successfully installed driver and loaded hex file…….now……how do i compile the driver ?……i’ve read the guide but iam finding it a bit tricky….

  18. Fernando Says:

    Hi Angelos!
    I have a couple of questions regarding the assembly of this project.
    Let me give you a heads up first. I was very interested in ordering a DIY kit from you, but unfortunately I saw that you are not receiving orders any more (please let me know if this is so, or if you may still sell a kit). So, I went on and tried to build this from zero. Problem is that here in Argentina you can’t find much SMD components, so I’m basically doing this in a through-hole prototype board. Since there are no SOIC pacakages for the Si3210 and the Si3201, I got a hold of a TSOP to SOIC adapter PCB. Let me know if you forsee any issue with this through-hole approach. So, here goes my questions:
    1) I’m having a hard time getting 1% resistor of the exact values that are in the schematic. Do you know if this is absolutely necessary? If not, how much can I deviate from those values? Maybe you can tell me the ones that need to be absolutely precise and which don’t…
    2) I saw that the 3201 has an exposed thermal pad on its down side. Regretfully, the adapter PCB board that I purchased to get this IC onto the through-hole board doesn’t have a pad in the place where the thermal pad of the IC would be touching it. How much of a “MUST” is to solder this thermal pad to the PCB? Can it be neglected or should I look for a workaround? If it is a “MUST”, why did you connect this pad to ground (gnd)? In the case of me needing a workaround, how does solering tin foil to the thermal pad sound to you? 😛

    You may want to know that for the time being I have soldered everything regarding to the PIC, and could get the bootloader going, and get the Microchip windows software recognise it. My next step would be to solder the rest (3210 and 3201), but in order to do this I wanted those questions above sorted out.
    I really, really appreciate your help!
    Thanks a lot in advance.
    Please contact me by email if you feel like it would be better!


  19. Angelos Varvitsiotis Says:

    Hi Fernando,

    For (1) I have not really made any experiments with approximate-valued resistors to see what will happen. I can only tell that in some places of the circuit (the resistors that supply reference voltage to the Si3210 or the ones used in the voltage and current sensors) its critical to have the correct value. I think that it is easier to order 1% resistors from an Internet shop like RS, Mouser or Farnell (or have a local store do this on your behalf) than to experiment with incorrect values. E48 or E96 resistor series have 2% and 1% tolarances, and this is what you should use in these critical places. If you do not have access to weird-valued resistors (like e.g. 450 Ohms), you can calculate pairs of resistors in parallel that will yield a value close to that, according to Ohm’s law. I have used this little trick myself in the past when experimenting with early versions of my design. If you choose to do so yourself, you should measure the resulting pair’s value with an Ohm-meter before soldering the resistor pair onto your PCB, to make sure it is close enough to the nominal value.

    For (2), your circuit may work without a thermal or heat sink, however in the past I had designed a PCB without enough heat sink space, and I saw a couple of 3201’s getting too hot and burning during operation. This is why I have designed a second version of my PCB having a large portion of its surface acting as a heat sink. I don’t have the 3201 datasheet handy right now, but I vaguely remember that the thermal must be connected to GND, and this is why I did so. I am not sure if it is critical for its operation, but why not do it if you can… Yes, you may try to use a separate heat sink. A “hack” that you could do is to bend the pins of the chip towards its top side, then solder it upside-down, on the opposite side of your PCB than you normally would, with the top side of the chip facing the board. Thus the thermal will be exposed, and you can apply some heat-conducting paste and glue a small heat sink to it. Nifty, isn’t it? You can also secure the heat sink on the chip with a piece of copper wire whose two ends you would solder to GND, thus satisfying also the electrical connectivity requirements.

    I wish you good luck with your prototype. You may contact me if you are in need of a PCB or some materials.



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: