6

Two of my friends and I want to build a device that helps one to transfer data from one USB mass storage device to another using a a touch screen interface. We have worked on embedded projects before but they were much simpler and not related to USB. Therefore , we have started reading relevant material on USB. (Jan Axelson usb complete and USB mass Storage if it helps.)However, I feel this is really slowing us down.

We've only figured out a rough schematic of the project. We know that 2 hosts will be required for each mass storage device connected our device.Each of the host controllers will be connected to an MCU and a 3rd MCU will be required for the touch screen interface. However we can't move forward and tell what needs to be done next. We plan to use the TUSB7320 as the host controller. My question has a few parts:

  • How much time will this project take given our knowledge about USBs and our current approach?Can it be completed by March next year?
  • Is there any other relevant(or better) literature or tutorial we ought to look into apart from what was mentioned?
  • Are we right about the rough schematic that I described earlier in this question?
  • How should we divide work in order to optimize manpower?

I understand these questions (especially the last one) may be not be in accordance with the policy of the website. But we are only students and really want to make this work. We haven't found a suitable guide even after a long search and some guidance from experts such as yourselves will be a blessing! I earnestly request you to provide us with advice or at least point us in the right direction.

******* UPDATE *******

Thanks guys for all the help! We've made some progress and decided the main components for our device. Also, we'll be making it for the USB 2.0 now!

We've decided to use ARM9. This is because we came by a person who introduced us to friendly ARM and told us it could work for us.

We'll be dumping the TUSB7320 and instead use the DS Vinculum 2 dual host controller IC.

Also, we are going to use an operating system to ease our work. We're torn between Linux,windows CE and Android. I personally think we should go with linux because that'll help us protect the device from viruses(I hope I'm right?) and its free. However my partners think android will be a better option because there are many people who are into android and might know a thing or two that could help us out.

Are there other things we should consider or crucial details that we're missing out on?Which OS suits this device best and how should we go about the software especially the end user GUI on the touch screen?

Lundin
  • 17,577
  • 1
  • 24
  • 67
Vineet Kaushik
  • 1,147
  • 2
  • 13
  • 19
  • 2
    This would typically be done with one processor and a hub, it's unclear that there will be any advantage in trying for USB3. Practical approaches could be completed in as little as a week (but on average a good semester scale project) however if you insist on doing things in a roundabout fashion you could probably manage to consume a year or more. – Chris Stratton Sep 28 '13 at 19:25
  • @ChrisStratton We wanted to incorporate USB 3.0 to add more function to the device. And what exactly do you mean by a practical approach? – Vineet Kaushik Sep 29 '13 at 05:38
  • I mean focusing on key features and not chasing buzzwords. What write speed can your storage devices sustain? – Chris Stratton Sep 29 '13 at 15:24
  • @ChrisStratton I'm not sure what you mean by write speed of storage devices, but according to links on google USB2.0 mass storage devices can achieve an average write speed of 34 MB/s – Vineet Kaushik Sep 30 '13 at 07:44
  • 1
    Most flash based devices cannot, which calls the benefit of a faster interface into question. – Chris Stratton Sep 30 '13 at 12:03
  • Okay but won't accommodating compatibility for future be a good reason for doing it? What are the downfalls of trying to making it for USB 3.0 apart from added costs? – Vineet Kaushik Sep 30 '13 at 13:57
  • Added complexity. Reduced set of components to chose from. Added signal integrity challenges. Added likelihood you won't get the project done on time. – Chris Stratton Sep 30 '13 at 14:07
  • @ChrisStratton The signal integrity and project not being completed on time gives me goosebumps.So thanks,I will keep your advice in mind! BTW Won't the signal integrity be handled implicitly by an IC? – Vineet Kaushik Sep 30 '13 at 14:51
  • No, it is an issue of PCB design. You really need to learn more about this subject before you can plan a reasonable project; consider finding an eval board with a capable chip and USB full speed or (2.0) high speed host interface, and working up the software for a prototype. – Chris Stratton Sep 30 '13 at 15:13
  • 3
    If you are new to USB, there is an excellent introduction at http://www.beyondlogic.org/usbnutshell/. And unless you absolutely require the higher data rates of USB3, you'll be much better off sticking with USB2. – dwikle Oct 01 '13 at 02:04
  • @Vineet Kaushik: You plan to use a USB host controller that uses PCI Express as its host bus interface. You plan to connect this to an MCU. Which MCU can handle a PCI Express interface? When you mention MCU, I suspect you heavily underestimate the computing power neccessary for the task you're planning. For this task, with USB3.0, you need at least a 0.5-1GHz-speed microprocessor (probably some Cortex A8/A9, or similar), not an MCU. – Laszlo Valko Oct 01 '13 at 16:57
  • @LaszloValko I hadn't thought of that.I read that in a host, the host controller can be a separate chip or be embedded in a MCU. Therefore, I thought the standard way of going about this would be to use a microcontroller. – Vineet Kaushik Oct 02 '13 at 06:01
  • Just a suggestion: Raspberry Pi? It can accommodate fairly large amounts of data at one time. I have even hosted a Minecraft server when I was bored, and it worked very well. It has a video output, and the touchscreen could be a simple overlay with USB. It also is very efficient: for me ~10 KWH with my adapter. You could somehow add a hub that connects to both devices, and then write some software for it. Just wondering: what will you use it for? – Anonymous Penguin Oct 08 '13 at 01:01
  • We did look at Raspberry pie in the beginning but put the idea away eventually. We wanted to design the complete device by ourselves. And Sorry for an extremely late reply!Was busy with college. – Infusion of Wormwood n Asfodel Oct 20 '13 at 13:33
  • Guys I've updated my question. Not sure if you'll get a notification so please check it out. – Vineet Kaushik Nov 26 '13 at 14:55
  • Your question mentions 3 MCUs, which seems to be massive overcomplication: you just need one MCU with two host interfaces. In fact, with the "DS Vinculum 2" (which has a substantial non-ARM MCU in it) and an SPI-based display with a couple of buttons, you could do the whole thing in that one chip; starting from a modified version of this app note: http://www.ftdichip.com/Support/Documents/AppNotes/AN_186_VNC2_SPI_to_USB_Memory_Bridge.pdf – pjc50 Nov 26 '13 at 15:18
  • @pjc50 Yes I know it complicates the whole thing which is why we're using a different set of components. I've mentioned that in the update – Vineet Kaushik Nov 30 '13 at 14:43
  • 1
    "nstead use the DS Vinculum 2 dual host controller IC" -- please note that while the DS Vinculum 2 supports USB 2.0 protocol, it only does so at a maximum rate of 12 Mbs (USB full speed). The DS Vinculum 2 does not support 480 Mbs (USB high speed) introduced with USB 2.0. I have been bitten by this before, thinking a USB 2.0 device always implied support for 480 Mbs. – tcrosley Dec 01 '13 at 06:54
  • Don't try to do everything by yourself, from first principles. Try to reuse the work of others and learn from their mistakes and successes. Find app notes, example code, eval boards, read the source code of Linux drivers etc. Don't forget that operating systems and tool chains come with often massive learning curves. For example, if you were trying to use a Linux OS for a chip that has no Linux device driver, you would have to write a device driver first. What you would need to learn to do that is probably more than the rest of the project. – Jan Schiefer Dec 01 '13 at 07:27
  • An ARM9 will be far too weak for such a task. Even the strongest ARM9 hardly goes up to ~400-450MHz, and they are a pretty old architecture by today's standards. For 2 USB2.0 HS (480Mbps) links, you'd need something like 800-1000MHz of CPU power to fully handle. I'd have a look at newer ARM Cortex-A8/A7/A9/A15 chips & boards, *with at least 2 dedicated USB 2.0 HS ports*, for example Cubieboard, Marsboard, and their cousins. – Laszlo Valko Dec 02 '13 at 01:28

1 Answers1

2

For the software, I definitely think that Linux would be the way to go. The reasons I would choose it over android are threefold:

  1. Linux has a much easier way of handling file systems than Android. It was built as a server operating system, as opposed to android which was built to run on phones and tablets, so is less file-oriented, despite essentially being a Linux distro at its core.
  2. There are many platforms running Linux that you could use for a base. Embedded Linux devices are everywhere, whereas android devices are few and far between. I would heartily recommend starting with one of these platforms, as they will help get this off the ground much faster.
  3. Yes, you are correct about Linux being less prone to viruses.

The GUI problem is a major consideration. However, you are in luck. If you (or someone in your team) is familiar with C, writing a GUI in GTK+ would be the easy way out. This requires installing a bit more software (X, GNOME) than is ideal for an embedded platform, but all things considered I think it is the best way.

Hope this helps!

felixphew
  • 445
  • 7
  • 16