Friday, October 31, 2008

Essential USB Specifications and Develop embedded systems with USB

Universal Serial Bus (USB) allows peripherals and computers to interconnect using standard protocol and provide plug and play feature to the devices. At the moment there are 2 specifications available for USB they are,

USB 1.1 : In this specification data transfer rate is 12Mbps and 1.5Mbps.

USB 2.0 : Support data transfer rate up to 480Mbps.

Both these specifications support up to 127 devices and support for hot swapping (no need to power down to remove or connect the devices). In USB devices are categorized as a classes and each class represent the functionality that target device can provided to the host device. For example:

AUDIO : Audio and related systems

HID : Human Interface Devices. (E.g: Keyboard, Mouse, etc)

POWER: Devices related with the power such as UPS systems.

IrDA: Infrared devices.

There are 4 types of transfers take place over USB,

Control transfer : Used to configure the bus and devices on the bus.

Bulk transfer : Move data asynchronously over USB.

Isochronous transfer: Transfer time critical data and support for unidirectional transfers only.

Interrupt transfer: Used to retrieve data in regular intervals. (Generally from 1 to 255ms)

In a USB architecture data is transferred using packets and each packet contains synchronization byte, Packet ID (PID), contents and CRC (Cyclic redundancy check data) There are 4 packet types available in USB and they are,

Token Packets : 24bit packet that determine the type of a transfer that is take place over the bus.

Data Packet : Can transfer between 0 to 1023 bytes and also have 16bit CRC stage.

Handshaking Packet : Which is used to acknowledge the end to end data transfer.

Descriptor : Contain the device capabilities such as product identifier, manufacture code, class type, internal configuration, etc.

USB devices uses shielded four wires, cable to interconnect the devices. Data transfer is take place at D+ and D- (similar to RS422/485 specification) and other remaining 2 wires carrying power (+5V and 0V) to the device. D+ signal has a 15K pull-down resistor to the ground and D- has a 1.5K pull-up resistor to +3.6V power line.


In embedded systems there mainly two methods to implement USB interfaces,

Using standard bus interface: Most recommended devices are FT245, FT232 and USS820.

Using USB to SPI bridge: Most recommended device is ATMEL AT76C711 AVR microcontroller.

When designing embedded systems using USB we need to take special care about,

Noise : To prevent external noises designer need to add ferrite bead to the USB cable. Generally the value of the ferrite bead is depends on the total current required by the circuit.

Power Source : Need to provide well regulated power source to the device. Generally we use 7805 regulator to provide +5V to the USB interface and LM1086-3.3 to provide +3.3V power source to the system/device.

Double check the power lines (especially if you are working with FT245, FT232 and USS820 devices) and voltage ratings. Improper power connections and voltage levels may burn the chips and ports instantly.

Is Delphi for PHP successes ?

I’m trying Delphi for PHP 2.0 in few days back and I'm get very frustrated about it because of its pour implementation and technologies. Some key failures in Delphi for PHP 2.0 are,

- IDE is very buggy and most of the times it produces "Access Violation" errors and IDE get confused. (In my computer Delphi 7 tries to debug it.)

- Help is very pour and incomplete.

- JavaScript and PHP integration is very complex and buggy. Most of the time JavaScript codes may not work in client side and it is heavily depends on the web browser.

- Some times it is necessary to deploy entire "VCL" directory to the web server otherwise some of the VCL components produces invalid outputs. (specially RichEdit and TrackBar components)

- MySQL integration is pour and buggy.

- Build-in Apache web server crash several times and because of that reason we may not be able to debug/run web application using IDE.

- Some times XML file (xml.php) generated by Form Designer may not compatible with VCL for PHP framework.

- Some of the controls have missing properties.

Actually most of these problems are not very critical (we can fix most of them at the work) and hopefully Qadram Software will fix these problems in there next releases but at the moment Delphi for PHP is not a wise investment for PHP rapid application developments (RAD) and I’m personally recommended to use PRADO framework ( instead of Delphi for PHP. PRADO have same features as Delphi for PHP. The only thing is it does not have drag-and-drop style IDE.

Compared with other web application development systems (IDEs) the concept of "Delphi for PHP" is an excellent and it provide complete web application development solution to the PHP, Delphi/C++Builder users, only thing is it need more maturity.

According to my observations Delphi for PHP is not a tool developed by CodeGear (former – Borland), it is developed by Qadram Software and the core of the system – "VCL for PHP" framework is available in as an open source free software project, (same as PRADO) so anyone can modify, fix errors or add features to that framework. VCL for PHP is distributed under the terms and conditions of GNU – LGPL (GNU Lesser General Public License), and its competitive framework PRADO is distributed under the BSD Licenses.

Note : If you are a Delphi/C++Builder developer it is highly recommended to use PRADO because it’s naming standards and execution patterns are more similar to Delphi VCL.

Friday, October 3, 2008

Design USB Devices and interface them using Delphi

According to my experiences USB devices are bit complicated to design and writing software (drivers and support applications) for USB devices are time consuming and complex process.

Most recommended (and easiest) method to design hardware interface for USB port is using Future Device Technologies FT245 or FT232 chips. At the moment both these chips support for USB 2.0 and have excellent set of APIs.

To test the performance of this device I implement some experimental version of PC oscilloscope using FT245 USB Interface, AD7575 ADC, LF347 Op-amp, 4069 Hex Inverter and array of AM7205 FIFOs. Application program is design using Delphi 7 and it is totally based on FTDI Delphi APIs. This test system is worked perfectly in Windows XP and Windows 2003 systems during my test runs and produce excellent results.

I choose FT245 for this design because it has 8 parallel input interfaces and this is perfectly matched with AD7575 ADC. (AD7575 also have 8 parallel outputs) I use 2705 FIFOs to capture the maximum number of samples.

So implementing USB system is not a big problem now, we may use

  • FT245 Parallel USB FIFO or,
  • FT232 Serial USB FIFO

Both these chips have APIs in C++, Delphi, Visual Basic, etc. I’m choosing Delphi because of its performance, features and familiarity and I’m also use FT245 API with C++Builder 6, 2006 and Delphi 5, 6 and Delphi 2007 without any problem.

There are several interesting features available in FT245/232 chips which include,

  • Support for suspend mode

  • Several power configuration (USB self powered, external powered options)

  • Interface EEPROM with device descriptor.

  • Operate with standard +5V power supply

  • Higher data transfer rate (up to 15Mbps)

FT245/232 generally operates with +5V and all I/O ports support standard logic voltage levels so we can interface FT245/232 with any standard digital system easily and I’m also use FT245 with PIC and ATMEL microcontrollers without any problem.

Only problem in FT245/232 is its SMD package, because of this reason it is bit difficult to use this chip with standard project boards/prototype boards.