|Online Development Notebook > Index > Programming Overview > Device Commands > Wire2Data|
Wire2Data - Send 2-wire data (8 or 9 bits) to the 2-wire port, receive data
VERSION 3.35+ of the firmware, VERSION 65+ of the DLL
This function sends data to the 2-wire port. Eight bits of data are clocked out the 2-wire port. The 2-wire data line toggles to match the bits in the command as the clock line pulses high. Optionally a 9th data bit can be sent. For I2C this command is good for transmitting⁄receiving a byte (8 bits) of data, as well as an optional 'ACK' bit.
Command Syntax: (USBm.dll)
USBm_Wire2Data( device, dataarray )
The USBm_Wire2Data function syntax has these parts:
|device||A zero-based index to address the appropriate USB device.|
|dataarray||A byte array that contains the specific settings of this command, the data to send, and the data received. The minimum size of this array must be 6 bytes.|
Data is shifted onto the 2-wire data line most-significant bit first. The data bit is set on the data line, the clock line is set high. The data line is read (the device that you are communicating with may be pulling that line low) and the clock line is set low. The 8 bits of the data byte are sent this way. The 9th bit would be sent after the data byte is finished. The 9th bit is optional.
The data array contains data for this command. Byte 0 is set to 0. Byte 1 bit 0 of the array is the value (1 or 0) of the 9th bit. Byte 1 bit 1 is a bit that suppresses 9th bit if set to 1, but allows the 9th bit of set to 0. The 9th bit is often used in I2C communication as the 'ACK' bit. Byte 2 of the data array is the 8 bits of data to send in the command.
After completion of this command, byte 0 of the array will contain the 8-bit value read from the 2-wire data port. Byte 1 bit 0 will contain the value of the 9th bit.
Performing a read of the 2-wire bus is done by setting the byte value to all 1. (FFh or 0xFF) This is essentially writing 1s to the data line, which in the open collector⁄drain hardware configuration of the 2-wire bus lines will let the 2-wire device that you are talking to pull the lines low for the 0s that it wishes to transmit.
|Public Declare Function USBm_Wire2Data _|
Lib "USBm.dll" _
(ByVal device As Byte, _
ByRef dataarray As Byte) _
|Dim dataaray(8) As Byte|
dataarray(0) = 0
dataarray(1) = 1
dataarray(2) = &H10
USBm_Wire2Data 0, dataarray(0)
This code fragment sends a byte of value 10h to device 0, plus the 9th bit set as 1. Dataarray(0) will contain the value read from the bus, which will be the 10h sent, unless there is bus contention. Bit 0 of dataarray(1) will have the value of the 9th bit. A 1 was sent for this bit, and the returned 9th bit will be a 1, unless the 2-wire device pulled that bit to a 0.
|int USBm_Wire2Data( unsigned char device, unsigned char *dataarray );|
Raw Command Format:
|2|| Bit 0: State of the 9th bit. Transmitting a 0 will pull the 2-wire data line to ground. Transmitting a 1 will allow that line to float high, or be pulled to ground by the 2-wire device.
Bit 1: 9th bit suppression. Setting this bit to 1 stops the 9th bit. (Only 8 bits transmitted) Setting the bit to 0 allows the 9th bit to be sent.
|3||Byte (8 bits) of data to shift onto the data line.|
Raw Command Format Details:
Byte 0 contains the command. Byte 1 contains 00h. Byte 2, bit 0 is the value for the 9th bit. Byte 2 bit 1 controls the 9th bit - set to 0 to transmit the 9th bit. Byte 3 is the data byte to shift out the 2-wire bus. Byte 4 through byte 7 are unused.
Raw Command Response Format:
|1||Data read from line|
|2||Bit 0: The value of the 9th bit|
Raw Command Response Format Details:
Byte 0 contains the command. Byte 1 contains the byte read from the 2-wire bus. Byte 2 contains the value of the 9th bit. Byte 3 through byte 7 are unused.
Raw Command Example Usage:
Hardware: U401 USB Interface U421 USB Interface U451 USB Interface
Programming: USBm DLL Programming Download Files
Application Notes: U4x1 Application Notes Misc Applications and Information FAQ
While every effort has been made to make sure that the information posted on this site is correct, the author can not be held liable for any damages whatsoever for losses as a result of the application of this information. Use this information at your own risk.
USBmicro can design your custom and semi-custom USB product. Email about USB design can be directed to " Robert " at usbmicro.com.
Copyright © USBmicro, L.L.C., 2002-2010