bRequest: FTGETE2READ
wIndex: Address of word to read
Data: Will return a word of data from E2Address
bRequest: FTRESET
wValue: Ctl Val
wIndex: Port
The Reset SIO command has this effect:
Sets flow control set to'none'
Event char = 0
Event trigger = disabled
Purge RX buffer
Purge TX buffer
Clear DTR
Clear RTS
baud and data format not reset
The Purge RX and TX buffer commands affect nothing except the buffers
BmRequestType: SET
bRequest: FTSETBaudRate
wValue: BaudDivisor value - see below
wIndex: Port
The BaudDivisor values are calculated as follows:
- BaseClock is either 12000000 or 48000000 depending on the device. FIXME: I wish
I knew how to detect old chips to select proper base clock!
- BaudDivisor is a fixed point number encoded in a funny way.
(--WRONG WAY OF THINKING--)
BaudDivisor is a fixed point number encoded with following bit weighs:
(-2)(-1)(13..0). It is a radical with a denominator of 4, so values
end with 0.0 (00...), 0.25 (10...), 0.5 (01...), and 0.75 (11...).
(--THE REALITY--)
The both-bits-set has quite different meaning from 0.75 - the chip designers
have decided it to mean 0.125 instead of 0.75.
This info looked up in FT application note"FT8U232 DEVICES Data Rates
and Flow Control Consideration for USB to RS232".
- BaudDivisor = (BaseClock / 16) / BaudRate, where the (=) operation should
automagically re-encode the resulting value to take fractions into consideration.
As all values are integers, some bit twiddling is in order:
BaudDivisor = (BaseClock / 16 / BaudRate) |
(((BaseClock / 2 / BaudRate) & 4)? 0x4000 // 0.5
: ((BaseClock / 2 / BaudRate) & 2)? 0x8000 // 0.25
: ((BaseClock / 2 / BaudRate) & 1)? 0xc000 // 0.125
: 0)
For the FT232BM, a 17th divisor bit was introduced to encode the multiples
of 0.125 missing from the FT8U232AM. Bits 16 to 14 are coded as follows
(the first four codes are the same as for the FT8U232AM, where bit 16 is
always 0):
000 - add.000 to divisor
001 - add.500 to divisor
010 - add.250 to divisor
011 - add.125 to divisor
100 - add.375 to divisor
101 - add.625 to divisor
110 - add.750 to divisor
111 - add.875 to divisor
Bits 15 to 0 of the 17-bit divisor are placed in the request value. Bit 16 is
placed in bit 0 of the request index.
Note that there are a couple of special cases to support the highest baud
rates. If the calculated divisor value is 1, this needs to be replaced with
0. Additionally for the FT232BM, if the calculated divisor value is 0x4001
(1.5), this needs to be replaced with 0x0001 (1) (but this divisor value is
not supported by the FT8U232AM).
bRequest: FTSETDATA
wValue: Data characteristics (see below)
wIndex: Port
Data characteristics
B0..7 Number of data bits
B8..10 Parity
0 = None
1 = Odd
2 = Even
3 = Mark
4 = Space
B11..13 Stop Bits
0 = 1
1 = 1.5
2 = 2
B14
1 = TX ON (break)
0 = TX OFF (normal state)
B15 Reserved
bRequest: FTSETMODEMCTRL
wValue: ControlValue (see below)
wIndex: Port
NOTE: If the device is in RTS/CTS flow control, the RTS set by this
command will be IGNORED without an error being returned
Also - you can not set DTR and RTS with one control message
ControlValue
B0 DTR state
0 = reset
1 = set
B1 RTS state
0 = reset
1 = set
B2..7 Reserved
B8 DTR state enable
0 = ignore
1 = use DTR state
B9 RTS state enable
0 = ignore
1 = use RTS state
B10..15 Reserved
bRequest: FTSETFLOWCTRL
wValue: Xoff/Xon
wIndex: Protocol/Port - hIndex is protocl / lIndex is port
hIndex protocol is:
B0 Output handshaking using RTS/CTS
0 = disabled
1 = enabled
B1 Output handshaking using DTR/DSR
0 = disabled
1 = enabled
B2 Xon/Xoff handshaking
0 = disabled
1 = enabled
A value of zero in the hIndex field disables handshaking
If Xon/Xoff handshaking is specified, the hValue field should
contain the XOFF character
and the lValue field contains the XON character.
bRequest: FTGETLATENCYTIMER
wIndex: Port
wLength: 0
Data: latency (on return)
bRequest: FTSETLATENCYTIMER
wValue: Latency (milliseconds)
wIndex: Port
wValue:
B0..7 Latency timer
B8..15 0
Set the timeout interval. The FT collects data from the slave
device, transmitting it to the host when either A) 62 bytes are
received, or B) the timeout interval has elapsed and the buffer
contains at least 1 byte. Setting this value to a small number
can dramatically improve performance for applications which send
small packets, since the default value is 16ms.
BmRequestType: SET
bRequest: FTSETEVENTCHAR
wValue: EventChar
wIndex: Port
wValue:
B0..7 Event Character
B8 Event Character Processing
0 = disabled
1 = enabled
B9..15 Reserved
Set the special event character for the specified communications port.
If the device sees this character it will immediately return the
data read so far - rather than wait 40ms or until 62 bytes are read
which is what normally happens.
BmRequestType: SET
bRequest: FTSETERRORCHAR
wValue: Error Char
wIndex: Port
Error Char
B0..7 Error Character
B8 Error Character Processing
0 = disabled
1 = enabled
B9..15 Reserved
Set the parity error replacement character
for the specified communications port
BmRequestType: GET
bRequest: FTGETMODEMSTATUS
wIndex: Port
wLength: 1
Data: Status
One byte of data is returned
B0..3 0
B4 CTS
0 = inactive
1 = active
B5 DSR
0 = inactive
1 = active
B6 Ring Indicator (RI)
0 = inactive
1 = active
B7 Receive Line Signal Detect (RLSD)
0 = inactive
1 = active
|