ATMEL AT42QT1085 Object protocol guide Datasheet

Atmel AT42QT1085
Object Protocol Guide
1.
Introduction
This document describes in detail the Object Protocol for the AT42QT1085
(QT1085).
The Object Protocol provides a single common interface across the Atmel ®
QTouch ® touch sensor controllers. This allows the different features in each
controller to be configured in a consistent manner. It makes the future expansion of
features and simple product upgrades possible, whilst allowing backwards
compatibility for the host driver and application code.
2.
Overview
2.1
Memory Map Structure
The protocol is designed to control the processing chain in a modular manner. This
is achieved by breaking the features of the device into objects that can be
controlled individually. Each object represents a certain feature or function of the
device, such as a touchscreen or a key array. Objects can be disabled or enabled
as needed.
Each object has its own configuration memory. The objects are stacked together to
produce an object-based memory map. A generalized structure of this memory
map is shown in Figure 2-1.
There are some special objects that can use their memory space for a unique
purpose. One example is the Command Processor T6 object, which executes a
command when a certain value is written into its memory space. Another example
is the Message Processor T5 object, which outputs messages by having the host
read its memory space.
From Figure 2-1 on page 2 it can be seen that the memory map contains two main
sections:

An Information Block. This documents which objects are contained in the
memory map for the device (see Section 2.2 on page 2). It is further subdivided into the ID Information Block and the Object Table (see Section 2.4
on page 4).

The objects themselves (see Section 2.5 on page 5).
9626C–AT42–05/3013
Figure 2-1. Generic Memory Map Structure
Family ID
Variant ID
Version
Build
ID
Information
Number of Keys
Value = 1
Type
Number of Object Table Elements
Start Address
Object Table Element 1
Object Table Element 2
Size-1
:
Instances-1
Object Table Element n
Number of Report
IDs Per Instance
Information Block Checksum
Information
Block
Object
Table
Object 1
Object 2
:
Objects
Object n
2.2
Information Block
The Information Block allows the host to read information about the layout of objects in the memory map. It contains
a list of all the objects in the memory map. This is used by the host driver to know which objects exist, where they are
located in the memory map and their sizes. The host driver can therefore read the device Information Block and
gather enough information to be able to communicate with the device.
The Information Block is positioned at the start of the memory map at address zero. This allows it to be read easily
by the host as the first operation.
The Information Block contains the following three sections:

The ID Information fields. These include:

Standard ID fields that make up the unique identifier for the device

The number of touch sensor channels that the device supports

The number of objects in the Object Table

The Object Table itself. This acts as an index to the objects in the memory map.

A checksum for the Information Block. This allows the host to check that the Information Block has been read
correctly over the communications interface. See Appendix A. on page 33 for details on calculating the
checksum.
Table 2-1 shows the contents of the Information Block.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
2
Table 2-1.
Information Block Layout
Byte
Description of Field
0
Family ID
1
Variant ID
2
Version
3
Build
4
X = number of keys
5
Y=1
6
Number of elements in the Object Table
7 – 12
Object Table element 1 (6 bytes)
13 – 18
Object Table element 2 (6 bytes)


...
Last Object Table element (6 bytes)
(end-2) – end
2.3
24-bit checksum (3 bytes)
ID Information
Object Table
Checksum Field
ID Information
The first four bytes of the Information Block are used to identify the device and its version, as in Table 2-2.
Table 2-2.
Device Identifier Fields
Field
Description
Family ID
A unique identifier that indicates the device family. The family ID for the QT1085 is 0x03.
Variant ID
A unique identifier that indicates the device variant. The variant ID for the QT1085 is
0x00.
Version
The current major and minor firmware version of the device. The upper nibble contains
the major version and the lower nibble contains the minor version. For example, firmware
version 0.1 is stored as 0x01.
Build
The firmware build number.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
3
2.4
Object Table
2.4.1
Introduction
The Object Table is held within the Information Block and contains information on all the objects held within the
memory map. It indicates which objects are present and their addresses.
Each element in the Object Table has the fields listed in Table 2-3.
Table 2-3.
Byte
2.4.2
Format of an Object Table Element
Description of Field
0
Type
1
Start position LSByte
2
Start position MSByte
3
Size – 1
4
Instances – 1
5
Number of Report IDs per instance
Type
Each type of object has a unique type code to identify it. This is the number after the _T suffix at the end of the object
internal name as given in Section 3. to Section 7.. For example, the type code for the Command Processor is 6 (from
GEN_COMMANDPROCESSOR_T6).
2.4.3
Start Position
Bytes 1 and 2 of the Object Table element hold the start location of the object in the memory map (LSByte and
MSByte respectively).
The driver code should ALWAYS read these bytes to find out where in the memory map the object is located and use
this address to communicate with the device. The driver code should never use hard-coded addresses for the
objects, as these may change with firmware updates.
This means that driver code can be written without making assumptions about the addresses of the objects. This
ensures that the code is future-proof and will work correctly following firmware updates to the device. It also makes it
possible to write common driver code for communication with any Atmel touch controller that uses this object-based
protocol approach.
2.4.4
Size
Byte 3 of the Object Table element holds the size (minus 1) of the object in the memory map. This is stored as Size–
1, so it is effectively the offset to the end of the object.
2.4.5
Number of Instances
Byte 4 of the Object Table element holds the number of instances of the object in the memory map, minus 1. The
number of instances can be calculated by adding 1 to this number (see Table 2-4 on page 6). The different instances
of an object are arranged consecutively in the memory map.
2.4.6
Report IDs
If an object sends messages, it is necessary to identify the messages from the object so that they can be correctly
interpreted. A report ID is therefore used to identify the source object of a message returned in the Message
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
4
Processor T5 object (see Section 4.2 on page 10).
Report IDs are numbered sequentially in the order in which the objects are listed in the Object Table, allowing for the
appropriate number of instances for each object. Note the following:

A report ID of zero is a reserved value for use by Atmel. Report IDs from a user’s perspective therefore
effectively start from 1.

A report ID value of 255 is reserved to indicate an invalid message response.
If an object has report IDs allocated, each instance of the object will have its own block of report IDs.
Figure 2-2 on page 5 shows an example of how the number of instances and the Report IDs per instance determine
the report IDs for a set of objects. Note that the objects shown in Figure 2-2 are examples only and may not reflect
the actual objects present on the QT1085.
The driver code should build up its own in-memory table of object types and associated report IDs during its
initialization. It can do this by parsing the object structure given in the Object Table. This in-memory table can then
be used to interpret the messages returned by the device.
A typical algorithm to process the report IDs is as follows:
1.
For each element in the Object Table:
1.
Read byte 4 to retrieve the number of instances (remember to add 1 to the value retrieved).
2.
Read byte 5 to retrieve the number of report IDs per instance.
3.
Multiply the figures retrieved in steps 1 and 2 together, and then add this number of
object type/report ID pairings to the table being built. The report IDs should have sequential values
starting with 1 (the zero value is reserved for use by Atmel).
Figure 2-2. Example Assignment of Report IDs
Report
ID
Object Instance
0
(Reserved)
Object
Instance
s
Report IDs
Command Processor T6
1
1
1
Command Processor
Key T13
8
8
2
Key Object 0
Haptic Event T31
8
8
:
9
Key Object 7
:
2.5
Objects
2.5.1
Classes of Objects
10
Haptic Event 0
17
Haptic Event 7
The QT1085 contains the following classes of objects:
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
5
2.5.2

Debug objects – provide a raw data output method for development and testing.
See Section 3. on page 8.

General objects – required for global configuration, receiving commands and transmitting messages. See
Section 4. on page 10.

Touch objects – operate on measured signals from the touch sensor and report touch data. See Section 5. on
page 17.

Signal processing objects – process data from other objects (typically signal filtering operations). See
Section 6. on page 20.

Support objects – provide additional functionality on the device. See Section 7. on page 23.
Object Instances
Table 2-4 lists the instances of the objects on the QT1085.
Table 2-4.
Objects on the QT1085
Object
Number of Instances
Reference
Debug Delta T2
1
Section 3.2 on page 8
Debug Reference T3
1
Section 3.3 on page 9
Debug Signals T4
1
Section 3.4 on page 9
Message Processor T5
1
Section 4.2 on page 10
Command Processor T6
1
Section 4.3 on page 11
Power Configuration T7
1
Section 4.4 on page 13
QTouchADC Configuration T49
1
Section 4.5 on page 14
8
Section 5.2 on page 17
1
Section 6.2 on page 20
Self Test T25
1
Section 7.2 on page 23
GPIO Configuration T29
16
Section 7.3 on page 25
Haptic Event T31
8
Section 7.4 on page 29
Debug Objects
General Objects
Touch Objects
Key T13
Signal Processing Objects
Touch Configuration T16
Support Objects
2.5.3
Configuration Defaults
The objects are designed such that a default value of zero in their fields is a safe value. For example, a value of zero
typically disables functionality.
An object must be configured as required with non-zero values before use. Any unused settings can be left at their
default zero values. The settings should also be written to the nonvolatile memory using the Command Processor T6
object (see Section 4.3 on page 11).
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
6
2.5.4
Compatibility of Object Versions
The Object Protocol described in this datasheet may document fields that are not present in the memory map as it is
implemented on a particular firmware version of the device. Over time newer versions of the objects in the Object
Protocol may gain additional fields to implement new features.
New fields are added to the end of an object to allow for this situation. This preserves the order of the fields between
old and new object versions. A driver designed to work with an older version of the device can safely set any
unknown fields located at the end of the object to zero. The device will then behave in the same manner as the older
version of the device without the field.
The host driver must always use the Information Block (see Section 2.2 on page 2) to locate the address of each
object and the current size of the object. It must also zero any fields that it does not intend to use. This ensures that
the host driver code is compatible with this object expansion scheme.
2.6
Configuration Checks
A configuration check is carried out following any write operation. A configuration check may determine that a
configuration error has occurred (for example, if a setting is set outside of its allowed range or a conflict has occurred
between two settings). This is signaled to the host (see Section 4.3.2 on page 12), and the device halts until the error
has been corrected. To fix the error, the object settings should be checked to verify that they are all within their
allowed limits, as stated in the field descriptions.
The device prevents invalid configurations by performing a sequence of checks. These checks are performed on
power-up and whenever configuration settings are updated.
If an error is found during the configuration check, the device pauses until the configuration error is resolved. The
device also flags the error to the host by setting the CFGERR bit of the Command Processor message data (see
Section 4.3.2 on page 12). This message will be sent to the host every 200 ms until the error is corrected.
Backup requests are allowed when an error has been found during a configuration check. This allows a setting to be
corrected and backed up to the nonvolatile memory (NVM). The device can then be reset for the setting to take
effect, if the setting requires this. The device will not operate until all errors have been corrected.
Possible causes of configuration errors are:

Multiple objects enabled which use the same pin

Field settings outside the permitted range

GPIO or Haptic Events whose source object is not enabled
If a configuration error is encountered during product development, it is sufficient for the designer to check the
settings used and correct them. In a working product, the device driver should resend the configuration settings and
request a backup. The device driver should be written to handle this.
To find the source of the configuration error, first disable all touch, signal processing and support objects. Then reenable each object in turn until the configuration error is found. Once the error has been corrected, the other objects
can be re-enabled and processing can continue as normal. See Appendix B. on page 37 for a flow chart showing this
method for finding configuration errors.
Notice should be taken of any recommendations in this datasheet concerning configuration checks for the offending
object.
2.7
Byte Order
The memory map uses a little-endian configuration for its bytes, meaning that all multi-byte fields lead with the least
significant byte (LSByte).
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
7
3.
Debug Objects
3.1
Introduction
Debug objects contain raw data for development and testing purposes. Table 3-1 lists the debug objects on the
QT1085.
Table 3-1.
3.2
Debug Objects
Object and Name
Description
Delta Debug
(DEBUG_DELTAS_T2)
Allows the measurement deltas to be read from the object
memory space. See Section 3.2.
Reference Debug
(DEBUG_REFERENCES_T3)
Allows the measurement references to be read from the object
memory space. See Section 3.3.
Signals Debug
(DEBUG_SIGNALS_T4)
Allows the measurement signals to be read from the object
memory space. See Section 3.4.
Delta Debug (DEBUG _DELTAS_T2)
The Debug Delta T2 object contains the raw signed 16-bit delta values received from all the sensing channels.
These values are supplied for debugging purposes
The maximum data size that can be held in the Debug Reference T3 object is 256 bytes (that is, the delta values for
up to 128 channels). .
Table 3-2.
Byte
DEBUG _DELTAS_T2
Field
0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Channel 0 delta LSByte
CHANNEL[0]
1

Channel 0 delta MSByte

254

Channel 127 delta LSByte
CHANNEL[127]
255
Channel 127 delta MSByte
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
8
3.3
Reference Debug (DEBUG_REFERENCES_T3)
The Debug Reference T3 object contains the raw 16-bit reference values received from all the sensing channels.
These values are supplied for debugging purposes.
The maximum data size that can be held in the Debug Reference T3 object is 256 bytes (that is, the reference values
for up to 128 channels).
Table 3-3.
Byte
DEBUG _REFERENCES_T3
Field
Bit 7
Bit 6
Bit 5
0
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Channel 0 reference LSByte
CHANNEL[0]
1



254
CHANNEL[12
7]
Channel 127 reference LSByte
255
3.4
Channel 0 reference MSByte
Channel 127 reference MSByte
Signals Debug (DEBUG_SIGNALS_T4)
The Debug Signals T4 object contains the raw 16-bit signal values received from all the sensing channels. These
values are supplied for debugging purposes.
The maximum data size that can be held in the Debug Signals T4 object is 256 bytes (that is, the signal values for up
to 128 channels).
Table 3-4.
Byte
DEBUG _SIGNALS_T4
Field
0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Channel 0 signal LSByte
CHANNEL[0]
1

Channel 0 signal MSByte

254

Channel 127 signal LSByte
CHANNEL[127]
255
Note:
Channel 127 signal MSByte
All 16-bit fields are non-atomic so it is possible for the 2 bytes of a 16-bit value to be updated by the device
mid-read. In this case the host may read the LSB of the earlier value and the MSB of the later value. Where
the value changes from positive to negative or increases from 255 to 256, this may lead to the 16-bit value
read by the host being quantitatively incorrect.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
9
4.
General Objects
4.1
Introduction
General objects provide global configuration, such as receiving commands and transmitting messages. Table 4-1
lists the general objects on the QT1085.
Table 4-1.
4.2
General Objects
Object
Description
Message Processor
(GEN_MESSAGEPROCESSOR_T5)
Handles the transmission of messages. This object holds a
message in its memory space for the host to read. See
Section 4.2.
Command Processor
(GEN_COMMANDPROCESSOR_T6)
Performs a command when written to. Commands include
reset, calibrate and backup settings. See Section 4.3.
Power Configuration
(GEN_POWERCONFIG_T7)
Controls the sleep mode of the device. Current consumption
can be lowered by controlling the acquisition frequency and
the sleep time between acquisitions. See Section 4.4.
QTouchADC Configuration
(GEN_QTOUCHADC_T49)
Configures the settings for the QTouchADC touch detection
method. See Section 4.5.
Message Processor (GEN_MESSAGEPROCESSOR_T5)
The purpose of the Message Processor T5 object is to relay the latest status information to the host. This object
contains the message data from those objects in the memory map that generate messages (for example, the touch
objects and the Command Processor T6 object). A message is generated whenever an object's status has changed.
For this to happen, the object report enable bit must be set.
When a device has data to send, it asserts the CHANGE line to indicate to the host that there is a message. The host
should then read the message and use the REPORTID field to determine from which object the message originated.
This provides the host with an interrupt-style interface. This has the potential for fast response times and reduces the
need for wasteful communications.
The host should ALWAYS use the CHANGE line as an indication that a message is available to read in the Message
Processor T5 object. The host should not read the Message Processor T5 object at any other time, such as to poll
the device for messages. If the Message Processor T5 object is read when the CHANGE line is not asserted, an
invalid message report ID is returned in the Message Processor T5 object.
Table 4-2.
GEN_MESSAGEPROCESSOR_T5
Byte
Field
0
REPORTID
Report ID for source object
1 – n (1)
MESSAGE
Message data from source object
n+1
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
CRC of message data
1. The size of the MESSAGE field is set to the length of largest message possible. It is dependent on the objects
present in the device at a particular revision. The size should be calculated by subtracting 2 from the size of the
Message Processor T5 object retrieved from the Object Table entry (see Section 2.4 on page 4). Any unused
bytes in a particular message should be treated as reserved bytes.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
10
REPORTID Field
This field contains the report ID for the message. Messages contain report IDs to allow the host to identify the
type of message and its originator. Report IDs are assigned to any object that can send messages. See Section 2.4.6 on page 5 for more information on the assignment of report IDs.
MESSAGE Field
This field contains the message data for the object generating the message.
The size of the MESSAGE field is fixed to the size of the message data for the largest object. For compatibility
with future firmware updates, this should always be calculated by subtracting 2 from the size of the object
recorded in the Object Table entry for the Message Processor T5 object (see Section 2.4 on page 4).
For information on the contents of the MESSAGE field, see the descriptions for each object elsewhere in this
datasheet.
4.3
Command Processor (GEN_COMMANDPROCESSOR_T6)
The Command Processor T6 object allows commands to be sent to the device. This is done by writing an
appropriate value to one of its fields.
4.3.1
Configuration
Table 4-3.
GEN_COMMANDPROCESSOR_T6
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
0
RESET
Reset
1
BACKUPNV
Backup settings
2
CALIBRATE
Calibrate
3
REPORTALL
Report current status
4–5
Reserved
Reserved
Bit 2
Bit 1
Bit 0
RESET Field
This field forces a reset of the device if a nonzero value is written.
Write value: Nonzero (normal)
BACKUPNV Field
This field backs up settings to the non-volatile memory (NVM). Once the device has processed this command
it generates a status message containing the new NVM checksum.
Write value: 0x55
CALIBRATE Field
This field performs a global recalibration on all channels. If all the channels are disabled, no message is generated. If the device is in Deep Sleep mode (see Section 4.4), a message is generated when the device wakes
from sleep.
Write value: Nonzero
REPORTALL Field
This field forces all objects that generate messages to report their current status:

For optional objects, this applies only if they have their report enable bit set and are currently enabled.

For objects that are always present and generate messages setting this bit will always cause a status
message to be reported.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
11
This field is cleared once the command has been processed.
Write value: Nonzero
4.3.2
Messages
The message data (see Section 4.2) for the Command Processor T6 object is shown in Table 4-4.
Table 4-4.
Message Data for GEN_COMMANDPROCESSOR_T6
Byte
Field
0
REPORT ID
1
STATUS
2
CHECKSU
M
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Report ID
RESET
OFL
SIGER
R
CAL
CFGER
R
COMMSE
RR
Reserved
Configuration settings checksum
STATUS Field
Reports the current status and flags errors. A bit is set to indicate the corresponding status/error. Note that
there may be more than one status/error reported.
CFGERR, CAL, SIGERR and OFL report ongoing status and error conditions, so once these status/error conditions have terminated, a further message is sent with the appropriate bit cleared.
COMSERR and RESET are one-off reports indicating already terminated conditions. These error conditions
do not generate a further message with a cleared bit.
COMSERR: There is an error with the communications checksum. This error bit is set when a read or write
operation is not completed correctly; that is:

An SS high event has occurred before the requested number of Read or Write bytes has been sent.

Additional byte exchanges have been attempted after the requested number of Read or Write bytes has
been sent, but no SS high event has been detected to initiate a new exchange.

An attempt to write to a read-only field of the memory map.
Note:
If there is an error after a write, then the data will still have been written to the device. It is the
responsibility of the host to take corrective action. COMSERR is cleared when SS is taken high
after a correctly completed Read or Write exchange.
CFGERR: There is a configuration error in one or more of the enabled objects. The device pauses its processing and generates a status message every 200 ms. Note that the device will stop scanning for touches while
the error persists.
Note: It is possible to execute a backup command while the device is in this error state.
See Section 2.6 on page 7 for more information on configuration checks.
CAL: The device is calibrating.
SIGERR: There was an error in the acquisition.
OFL: The acquisition and processing cycle length has overflowed the desired power mode interval. These are
controlled by the IDLEACQINT and ACTVACQINT fields in the Power Configuration T7 object (see Section
4.4). Note that the OFL flag is not updated in Free-run or Deep Sleep modes.
RESET: The device has reset.
CHECKSUM Field
Reports the checksum of the configuration settings held in the nonvolatile memory. See Appendix A. on
page 33 for details on how to calculate the checksum.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
12
4.4
Power Configuration (GEN_POWERCONFIG_T7)
The Power Configuration T7 object controls the active and idle (sleep) times of the device. Current consumption can
be lowered by controlling the acquisition frequency and sleep times between measurements.
The device operates in two modes: active (touch detected) and idle (no touches detected).
The normal state for the device is idle mode. In this mode the device operates in a series of long burst cycles. Each
cycle consists of a short burst (during which measurements are taken to detect a possible touch) followed by an
inactive sleep period.
When a touch is detected the device enters a Fast DI (free-run) mode. This consists of a series of free-run bursts to
confirm that a change in the touch state has indeed occurred. The number of bursts is determined by the TCHDI field
in the touch objects). If it is a genuine touch, the device enters active mode. In this mode the device operates in a
series of burst cycles that intersperse measurement bursts with very short sleep periods. These sleep periods are
typically shorter than those in idle mode.
When the user releases the touch, the device again enters a short Fast DI mode to confirm that a change in the
touch state has occurred. Then, if it is a genuine release, the device returns to idle mode after a short timeout period.
During this timeout, the device continues to run in active mode to allow further touches to keep the device active.
Note that the changes to the cycle time happen regardless of whether the touch object is reporting or not.
Table 4-5.
GEN_POWERCONFIG_T7
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
0
IDLEACQINT
Idle Acquisition Interval
1
ACTVACQINT
Active Acquisition Interval
2
ACTV2IDLETO
Active to Idle Time Out
Bit 2
Bit 1
Bit 0
IDLEACQINT and ACTVACQINT Fields
The length of the idle and active burst cycles is determined by the Idle Acquisition Interval (IDLEACQINT) and
the Active Acquisition Interval (ACTVACQINT) fields respectively.
A setting of 255 forces the device to enter Free-run mode the next time that the appropriate mode (idle or
active) is entered. In Free-run mode the device does not sleep between acquisitions. This gives the fastest
response time at the expense of power consumption.
A setting of zero forces the device to enter Deep Sleep mode the next time that the appropriate mode (idle or
active) is entered. The device remains in Deep Sleep mode until the IDLEACQINT or ACTVACQINT setting is
restored. Deep Sleep mode is used to conserve maximum power if the device does not need to be sensing. If
Deep Sleep mode is requested, it is advisable to set both IDLEACQINT and ACTVACQINT to zero to avoid
indeterminate behavior if one mode is still active. The status flags in the Command Processor (see Section 4.3
on page 11) are not updated when the device is in Deep Sleep mode.
Other values for IDLEACQINT or ACTVACQINT determine the Idle or Active Acquisition Interval in milliseconds. A high value causes more sleep time between acquisitions. This results in lower power consumption but
a slower response time.
Do not set either field to be less than the actual burst time. The device is also designed to sleep as much as
possible in order to conserve power. IDLEACQINT should therefore be set longer than ACTVACQINT. Under
some circumstances it may be desirable to set IDLEACQINT lower than ACTVACQINT. For example, this
might be necessary to minimize the difference between the best-case and the worst-case touchdown latency.
The minimum interval that can be specified is 4 ms. If an interval is required that is shorter than the minimum
value allowed, the Free-run mode setting (255) should be used instead.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
13
Range:
0 (Deep Sleep), 4 to 254 (interval in ms), 255 (Free-run)
IDLEACQINT Typical:
32 (32 ms)
ACTVACQINT Typical: 16 (16 ms)
ACTV2IDLETO Field
The device automatically goes into idle mode whenever possible after each scan to conserve power, unless a
touch object is being touched.
The device does not go into idle mode immediately. Instead there is a timeout period. The device runs in
active mode during this timeout period to allow further touches to keep the device active. This timeout period is
determined by the Active to Idle Timeout (ACTV2IDLETO) field. Under normal operation, the device enters
idle mode after the expiry of the Active to Idle Timeout and then remains in idle mode until the next touch is
detected. If there is more than one touch present, the Active to Idle Timeout applies only after the last touch
has been released. This means that once the device has been awakened by a change, the touch response
time is fast for as long as the sensor remains in use. Once channel activity lapses for a period longer than the
Active to Idle Timeout, the device returns to idle mode.
The Active to Idle Timeout is specified in 200 ms increments, where 0 means 1 cycle.
Range: 0 (1 cycle), 1 to 255 (in 200 ms increments)
Typical: 50 (10 seconds)
4.5
QTouchADC Configuration T49 (GEN_QTOUCHADC_T49)
The Tuning of the T49 settings for each channel allows the QTouchADC measurement procedure to provide
excellent results with a wide variety of sensor shapes and sizes and with different cover materials and thickness. The
purpose of a sensor can even be changed on the fly, for example a Proximity Sensor may be reconfigured as a
Guard Sensor simply by reducing the signal gain. This is done either by reducing the BLEN setting (for faster
operation) or increasing SCALE (for greater signal stability) such that the channel goes into detect on contact instead
of on approach.
4.5.1
Configuration
Table 4-6.
QTouchADC Configuration T49
Byte
Field
0
CONFIG_CH[0]
Bit 7
Bit 6
Bit 5
BLEN
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SCALE
:
n
CONFIG_CH[n]
BLEN
SCALE
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
14
CONFIG_CH Field
SCALE: The scale factor (averaging factor) for the accumulated signal is an exponent of 2. Unit = Scaling
denominator. (see Table 4-7).
Table 4-7.
Note:
Scale Factor
Setting
Scale Factor
Setting
Scale Factor
0
1
8
256
1
2
9
512
2
4
10
1024
3
8
11
2048
4
16
12
4096
5
32
13
8192
6
64
14
16384
7
128
15
32768
To ensure correct operation of the QT1085:
BLEN / SCALE combination must never lead to a signal of > 32767 or < 32
BLEN must never exceed SCALE by more than 5
BLEN: This is the number of measurements accumulated and is an exponent of 2. The number of
QTouchADC pairs to be generated for each key measurement.
Each pair of pulses give a 10-bit signal value. These signal values are accumulated over the number of
QTouchADC pairs and the total is divided by the scale factor. This configuration option allows for a wide configuration of Gain and Averaging on the acquisition signals.
Table 4-8.
BLEN (Number of Measurements Accumulated)
Setting
Number of Pulse Pairs
Setting
Number of Pulse Pairs
0
1
8
256
1
2
9
512
2
4
10
1024
3
8
11
2048
4
16
12
4096
5
32
13
8192
6
64
14
16384
7
128
15
32768
BLEN may be considered as a GAIN setting for the key signals, as the measurements taken are accumulated
to give the final signal value. For a given SCALE setting, each increment of the BLEN setting doubles the
number of measurements and therefore the signal value. Similarly the delta value used for touch detection will
doubled for each increment of BLEN.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
15
SCALE is an averaging factor which allows for efficient noise rejection in a noisy environment. For each increment in SCALE the signal value accumulated by BLEN is divided by 2.
For example, a BLEN:SCALE ratio of 6:3 (64 accumulated measurements, divided by 8) will result in signal,
reference and delta being of the same magnitude as for a setting of 3:1 (8 accumulated measurements,
divided by 1) but will have steadier resultant values in a noisy environment due to averaging.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
16
5.
Touch Objects
5.1
Introduction
Touch objects operate on measured signals from the touch sensor and report touch data. For example, a Key T13
object reports when a key is in detect. Table 5-1 lists the touch objects on the QT1085.
Table 5-1.
5.2
Touch Objects
Object
Description
Key T13
(TOUCH_KEY_T13)
Configures a single key.
See Section 5.2.
Key T13 (TOUCH_KEY_T13)
Each instance of a Key T13 object represents a key. There are 8 instances of the Key T13 object on the QT1085.
5.2.1
Configuration
Table 5-2.
TOUCH_KEY_T13
Byte
Field
Bit 7
Bit 6
Bit 5
0
CTRL[0 – n]
DISPRESS
DISREL
GUARD
1
CFG[0 – n]
2
TCHTHR[0 – n]
TCHDI
Bit 4
Bit 3
Bit 2
AKSGRP
Bit 1
Bit 0
RPTEN
ENABLE
HYST
TCHTHR
CTRL Field
ENABLE: Enables the use of this object. The object is enabled if set to 1, and disabled if set to 0. The object
does not scan for touches if it is disabled, in order to conserve power.
RPTEN: Allows the object to send status messages to the host through the message processor. Reporting is
enabled if set to 1, and disabled if set to 0. Events must be enabled for this bit to have an effect.
GUARD: This field determines whether the key is a guard key. Set to 1 to make the key a guard key. A guard
key differs from a normal key in that detection does not cause the device to change from IDLE to ACTIVE
mode. Also, a TCHAUTOCAL (Touch recal delay) is never carried out on a guard key.
DISREL: This field determines whether the key generates a message when the touch is released. Set to 1 to
not generate a message on release.
DISPRESS: This field determines whether the key generates a message on touch. Set to 1 to not generate a
message on touch.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
17
CFG Field
HYST: This field controls the level of hysteresis applied to touch detections. For a touch to enter detection the
touch delta must be greater than the touch threshold (TCHTHR). For a touch to leave detection the touch delta
must be less than (TCHTHR – HYST). This field allows a touch to be tuned so that a hovering finger does not
cause detection to flicker on and off. See Table 5-3 for the range of hysteresis levels available.
Table 5-3.
Hysteresis Levels
Bits
Hysteresis Level
00
50%
01
25%
10
12.5%
11
6.25%
AKSGRP: This field configures Adjacent Key Suppression® (AKS®) between this Key T13 object and any
other Key T13 objects.
AKS technology is a patented method used to detect which touch object is touched when objects are located
close together. A touch in a group of AKS objects is indicated only on the object with the largest signal. This is
assumed to be the intended object. Once an object in an AKS group is in detect, there can be no further detections within that group until the object is released.
Bits 2 – 4 specify which AKS groups this Key T13 object is within. The default value of 0 means that the object
is in no AKS groups and the AKS feature is disabled for that particular Key T13.
Range: 0 – 7 (0 = not in an AKS group, 1 – 7 = group number for AKS)
TCHDI: To suppress false detections caused by spurious events like electrical noise, the device incorporates
a detection integrator (TCHDI) counter mechanism to provide signal filtering. A per-key counter is incremented
each cycle that a touch is detected. When this counter reaches the TCHDI setting limit the touch is finally
declared to be present. If on any acquisition a delta is not seen to exceed the threshold level, the counter is
cleared and the process has to start from the beginning.
An opposite process is applied when a key leaves detection. The counter is decremented each cycle that the
delta does not exceed the threshold level, and incremented again if it does exceed the threshold. When the
counter reaches zero, the touch is finally declared to be out of detect. In this case there is an additional extra
cycle (that is, the number of cycles is TCHDI + 1).
Range:
0–7
TCHTHR Field
TCHTHR: The channel detection Touch Threshold value (TCHTHR) defines how much a channel's touch
delta (that is, Signal minus the Reference) must be to qualify as a potential touch detection. The reference
level is determined during calibration and adjusted using drift compensation. The final detection confirmation
uses the Touch Detect Integration as described in the TCHDI field. Larger values for the threshold desensitize
channels, since the signal must change more in order to exceed the threshold level. Conversely, lower thresholds make channels more sensitive.
The setting for TCHTHR for each channel depends on the amount of signal swing that occurs when a channel
is touched. Thicker panels or smaller electrode geometries reduce channel sensitivity (that is, signal swing
from touch). In this case smaller TCHTHR values are required to detect touch.
Range:
0 to 255
Typical:
30 to 80
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
18
5.2.2
Messages
The message data for the Key T13 object is shown in Table 5-2.
Table 5-4.
Message Data for TOUCH_KEY_T13
Byte
Field
0
REPORT ID
1
KEYSTATE
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
REPORT ID
KEYSTAT
E
REPORT ID Field
This field contains the report ID for the message. Messages contain report IDs to allow the host to identify the
type of message and its originator. Report IDs are assigned to any object that can send messages. See Section 2.4.6 on page 5 for more information on the assignment of report IDs.
KEYSTATE Field
This field indicates whether or not a key is in detect. 1 = in detect, 0 = not in detect.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
19
6.
Signal Processing Objects
6.1
Introduction
Signal processing objects process the data from other objects, for example to provide filtering operations. Table 6-2
lists the signal processing objects on the QT1085.
Table 6-1.
6.2
Signal Processing Objects
Object
Description
Touch Configuration
(PROCG_TOUCHCONFIG_T16)
Configures the parameters of the object.
See Section 6.2.
Touch Configuration (PROCG_TOUCHCONFIG_T16)
The Touch Configuration T16 object controls how the device processes touch information.
6.2.1
Configuration
Table 6-2.
PROCG_TOUCHCONFIG_T16
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
0
CFG
1
DRIFTST
Drift suspend time
2
TCHAUTOCAL
Touch automatic calibration
3
TCHDRIFT
Reserved
Touch drift
4
ATCHDRIFT
Reserved
Antitouch drift
CHRGTIME
Bit 2
Bit 1
Bit 0
ATCHCALTHR
CFG Field
ATCHCALTHR: The standard finger recovery process is intended to allow the sensor to recover when, for
example, a finger is present on the sensor during calibration and then subsequently removed resulting in an
anti-touch signal delta.
The ATCHCALTHR field sets the antitouch calibration threshold. If this field is set to zero then an anti-touch
recalibration will not take place. The away from touch signal will be compensated for only through the thermal
drift mechanism.
Table 6-3.
ATCHCALTHR Settings
Contents
Setting
0
100% of TCHTHR
1
50% of TCHTHR
2
25% of TCHTHR
3
12.5% of TCHTHR
4
6.25% of TCHTHR
5 – 15
Anti-touch delta count
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
20
CHRGTIME: prolongs the charge-transfer period of signal acquisition by 1 µs per count
Allows full charge transfer for keys with heavy Rs / Cx loading.
Range: 0 to 15
Typical: 0
DRIFTST Field
DRIFTST: The Drift Suspend Time (DRIFTST) setting controls the time from a touch release until the drift process is re-enabled. DRIFTST is used to restrict drift on all channels while one or more channels are activated.
It defines the length of time the drift is halted after a touch detection.
This feature is particularly useful in preventing an actual touch – or simply a hovering finger – from causing
untouched channels to drift. Without this feature, a sensitivity shift could be created that would ultimately
inhibit any further touch detection.
DRIFTST can be configured to a value of between 0 and 255 in increments of 200 ms, where a value of 0 =
disabled (no drift suspend time). This gives a range of 200 ms to 51 s.
Range: 0, 1 to 255 (in 200 ms increments)
Typical: 20
Default: 20
TCHAUTOCAL Field
TCHAUTOCAL: A prolonged (usually unintentional) contact from a foreign object may result in a touch detection for a prolonged interval. It is desirable to perform a recalibration in order to restore a touch object function.
This is usually done after a time delay of some seconds.
The Touch Automatic Calibration (TCHAUTOCAL) setting controls the length of time a touch is held until it is
considered false and an automatic recalibration is performed to compensate. The TCHAUTOCAL timer monitors touch detections. If a detection event exceeds the timer's setting, an automatic recalibration occurs. After
the recalibration has taken place, normal functionality resumes, even if the touch object is still being contacted
by the foreign object. This feature is enabled globally, but the exact mechanism depends on the object being
touched:

For a Key T13 object (see Section 5.2 on page 17) there is a counter per key, incremented while a touch
remains on the key. An automatic recalibration occurs if the touch is still present at the end of the
TCHAUTOCAL period. The automatic recalibration recalibrates all sensors.
TCHAUTOCAL can be disabled by setting it to zero (infinite timeout). In this case the object never autorecalibrates during a continuous detection (but the host could still command it). TCHAUTOCAL above 0 is
configured in 200 ms increments.
TCHAUTOCAL is not applied to a guard channel.
Range: 0 (infinite), 1 to 255 (in 200 ms increments)
TCHDRIFT Field
TCHDRIFT: The Touch Drift (TCHDRIFT) setting controls the ‘towards touch’ drift interval. Signals can drift
because of changes in the nature of the components and materials over time and temperature. It is crucial that
such drift is compensated for, otherwise false detections and sensitivity shifts can occur.
Drift compensation (see Figure 6-1) is performed by making the reference level track the raw signal at a slow
rate, but only while there is no detection in effect. The rate of adjustment must be slow, otherwise legitimate
detections could be ignored. The TCHDRIFT field can be configured in increments of 200 ms, where a value
of 0 means 10 (2 seconds).
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
21
Figure 6-1. Thresholds and Drift Compensation
Reference
Hysteresis
Threshold
Signal
Output
DRIFTST
The device drift compensates using a slew-rate limited change to the reference level. The threshold and hysteresis values are slaved to this reference. Any changes to TCHDRIFT affect the rate.
If the touch is in a Key T13 object, then once the signal has crossed the respective threshold level for that
object, the drift compensation mechanism ceases.
Range: 0, 1 to 127 (in 200 ms increments)
Typical: 5 to 20 (1 s to 4 s)
Default: 10 (2 s)
ATCHDRIFT Field
ATCHDRIFT: The Anti-touch Drift (ATCHDRIFT) setting controls the away from touch drift interval. Signals
can drift because of changes in the nature of the components and materials over time and temperature. It is
crucial that such drift is compensated for, otherwise false detections and sensitivity shifts can occur.
Anti-touch drift compensation is performed by making the reference level track the raw signal at a slow rate,
but only while there is no detection in effect. The rate of drift should be relatively fast for ATCHDRIFT, in order
to ensure that a touch can be detected. The ATCHDRIFT field can be configured in increments of 200 ms,
where a value of 0 means 2 (400 ms).
The device anti-touch drift compensates using a slew-rate limited change to the reference level. The threshold
and hysteresis values are slaved to this reference. Any changes to ATCHDRIFT affect the rate.
If the touch is in a Key T13 object, then once the signal has crossed the respective threshold level for that
object, the drift compensation mechanism ceases.
Range: 0, 1 to 127 (in 200 ms increments)
Typical: 1 to 5
Default: 2 (400 ms)
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
22
7.
Support Objects
7.1
Introduction
Support objects provide additional functionality on the device. Table 7-1 lists the support objects on the QT1085.
Table 7-1.
7.2
Support Objects
Object
Description
Self Test
(SPT_SELFTEST _T25)
Performs self-test routines to find faults on a touch sensor.
See Section 7.2.
GPIO Configuration
(SPT_GPIO_T29)
Sets up the general-purpose input/output (I/O) pins
See Section 7.3.
Haptic Event
(SPT_HAPTICEVENT_T31)
Configures a haptic effect to provide tactile feedback to the
user. See Section 7.4.
Self Test (SPT_SELFTEST_T25)
The Self Test T25 object runs self-test routines in the device to find faults in the sense lines and electrodes. The Self
Test T25 object runs a series of test sequences. As soon as the first failure is found, the test run stops and the object
reports a message.
The following tests can be run:

Signal Limit test. These test the signals from each of the touch objects on the device. These tests are run per
touch object and check whether signals for enabled keys are all within the range +32 to +32,767.

Pin Fault test: Checks for stuck at faults on enabled touch key pins and GPIOs which are configured as
outputs.
To run a test, the CMD field is set to the code of the test to be run. The Self Test T25 object runs the test once and
then stops. At the end of the test, the CMD field is cleared. If reporting is enabled (see “CTRL Field” on page 23), the
Self Test also sends a report message with the result of the test (see Section 7.2.2 on page 24). The tests can be
called at the following times:

For pin fault testing: when the sense lines are not in use.

For signal limit testing: at any time after acquisition when the signals are stable (such as not during
calibration).
Note:
7.2.1
If an error is found, the calibration command in the Command Processor T6 object should be used once the
error has been cleared.
Configuration
Table 7-2.
SPT_SELFTEST_T25
Byte
Field
0
CTRL
1
CMD
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Reserved
Bit 2
Bit 1
Bit 0
RPTEN
ENAB
LE
Test code of test to run
CTRL Field
ENABLE: Allows the object to run tests. Tests are enabled if set to 1, and disabled if set to 0.
RPTEN: Allows the object to report test messages. Reporting is enabled if set to 1, and disabled if set to 0.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
23
CMD Field
This field is used to send test commands to the device. Valid test commands are listed in Table 7-3.
Table 7-3.
Test Commands
Code
Test Description
0x00
The CMD field is set to 0x00 after test completed
0x11
Run the pin fault test
0x17
Run the signal limit test
0xFE
Run all the tests
Writing 0x11 and 0x17 to the CMD field causes the device to run a pin fault test or signal limit test (as
appropriate).
7.2.2
Messages
The Self Test T25 object reports the test results in its message data. The message data for the Self Test T25 object
is shown in Table 7-4.
Table 7-4.
Message Data for SPT_SELFTEST_T25
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
1
STATUS
Result code
2–6
INFO
Result data
Bit 2
Bit 1
Bit 0
STATUS Field
This field contains a result code that indicates the success or failure of the test. Valid codes are given in Table
7-5.
Note:
The device must be recalibrated when all errors have been resolved.
Table 7-5.
Result Codes
Code
Test Result
0xFE
All tests passed.
0x11
The test failed because of a pin fault. The INFO fields indicate the first pin fault
that was detected (see Table 7-6).
0x17
The test failed because of a signal limit fault.
INFO Field
This field contains the result data of the test. The actual data depends on which test was run, as detailed
below. Note that if a test does not generate data, the INFO field consists solely of reserved bytes.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
24
INFO Field – Pin Fault
If the result was a pin fault, the INFO field has the data format shown in Table 7-6.
Table 7-6.
Test Result Data for a Pin Fault
Byte
Field
Bit 7
2
SEQ_NUM
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Test sequence number
SEQ_NUM Field
The test sequence number of the test in which a fault is found. The sequence numbers and their meanings are
listed in Table 7-7.
Table 7-7.
Sequence Numbers
Bit
Description
7
1 = Pin High Fail. All pins are driven to Ground. This test detects shorts to Vdd
(that is, they fail high).
6
1 = Pin Low Fail. All pins are driven to Vdd. This test detects shorts to Ground (that
is, they fail low)
5
Pin type, 0 = Key, 1 = GPIO
4–0
Fail object instance (Key number or GPIO number)
INFO Field – Signal Limit Error
If the result was a signal limit error, the INFO field has the data format shown in Table 7-9.
Table 7-8.
Signal Limit Test Result
Bit
7
1 = Signal High Fail
6
1 = Signal Low Fail
5–0
7.3
Description
Fail object instance (Key number)
GPIO Configuration (SPT_GPIO_T29)
A GPIO Configuration T29 object sets up the general-purpose input/output (I/O) pins. The pins can be set up as input
or output. Output pins can generate a PWM signal depending on the state of the source object. There are twelve
dedicated GPIO pins, plus up to four additional pins (replacing keys). There are 16 instances of the GPIO
Configuration T29 object on the QT1085, one for each pin.
If a pin is not needed disable the relevant object (via the ENABLE bit in the CTRL field).
The only restriction is where a key and a GPIO share a pin; for example, Key 7 and GPIO 12. If both objects are
enabled this will give a configuration error. Otherwise the 16 GPIOs can all drive different PWM signals based on
input states.
GPIOs are checked and reported once per cycle, whether an ACTIVE or IDLE cycle is in progress.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
25
An Input GPIO status is updated, and a message generated if enabled, on the following cycle after a change to the
logic level applied at the pin. The maximum rate of change which can be reported is therefore equal to the applicable
cycle time.
Similarly an Output GPIO status is updated during the cycle following the change in status of its control source. GPIO
states are checked in ascending order, so, for example, a cascade effect where GPIOs use other GPIOs as control
source will occur within a single cycle if the cascade is upwards, or over n cycles where n GPIOs are configured in a
downward cascade. A GPIO configured as an output has some side-effects on the device power consumption.
7.3.1

If any GPIO is enabled and configured as an output, then the device cannot utilize its lowest power sleep
mode during LP_MODE as it must retain some high level timing functions for PWM generation.

If the device is put into Deep Sleep mode with a GPIO configured as an output, the GPIO will retain its latest
state on the pin. If the GPIO is running a PWM that is neither 0% nor 100% then the pin's state during deepsleep is unpredictable as the PWM may be in either the low or high period of its duty cycle at the time when
Deep Sleep is initiated.
Configuration
Table 7-9.
SPT_GPIO_T29
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
0
CTRL
OUTPUT
INVERT
DISOFF
DRIVELVL
TOGGLE
FADE
RPTEN
ENABLE
1
PWM
2
SOURCE
ON PWM
OFF PWM
SOURCE TYPE
SOURCE INSTANCE
CTRL Field
Note:
For a GPIO configured as an input, only the Enable, Invert and reporting settings RPTEN and
DISOFF are relevant. All other settings apply to GPIOs in Output mode only.
ENABLE: Enables the use of this object. The object is enabled if set to 1, and disabled if set to 0.
RPTEN: Allows the object to send status messages to the host through the message processor. Reporting is
enabled if set to 1, and disabled if set to 0. Events must be enabled for this bit to have an effect.
FADE: If set to 0 the feature is disabled and the duty cycle seen at the GPIO output pin jumps from OFF PWM
to ON PWM. If set to 1 the feature is enabled and steps from OFF PWM to ON PWM (and reverse) through
intermediate PWM levels at a rate of 1 step per 15 ms.
TOGGLE: If set to 0 the state follows the source. If set to 1 the state toggles with the ON event.
DRIVELVL: This sets the drive level for outputs only. See Table 7-10 for the settings.
Table 7-10. Drive Level
Setting
Output
0
Float high (open drain operation)
1
Drive high (push-pull operation)
DISOFF: Messages can be generated for ON and OFF events. This bit, if set to 1, disables the ability to generate messages for an OFF event.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
26
INVERT: For an input: 0 = Report logic level, 1 = Report inverted logic level. For an output, reverse ON and
OFF conditions.
Table 7-11. INVERT
Setting
Input
Output
Source state is not inverted,
0
Report logic level
0 = Off
1 = On
Source state is inverted,
1
Report inverted logic
level
0 = On
1 = Off
OUTPUT: Sets the direction of the GPIO pins:
1 = Output (PWM)
0 = Digital input
PWM Field
A GPIO configured as Output may generate any of 16 duty cycles from 0 to 100% by pulse-width modulation
of the digital signal at the pin.
All PWM settings are implemented at a fixed frequency of 66 Hz
Specifies that the GPIO pins are to be used as PWM pins and what the duty cycle is (see Table 7-12 on page
27).
The 4-bit PWM generated by the GPIO in the ON state. The 4-bit PWM generated by the GPIO in OFF state.
Note:
There may be some variance in the actual duty cycle and frequency of the PWM as the pin-state
updates is given a lower process priority than touch acquisition measurements or communications.
Table 7-12. PWM Settings
Setting
Number
Setting
Number
0
0%
8
53.36%
1
6.67%
9
60.03%
2
13.34%
10
66.70%
3
20.01%
11
73.37%
4
26.68%
12
80.04%
5
33.35%
13
86.71%
6
40.02%
14
93.38%
7
46.69%
15
100%
SOURCE Field
SOURCE TYPE: The type of object which controls whether GPIO in Output mode is delivering ON PWM or
OFF PWM.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
27
Selection of an object type that does not exist on the device should generate a Config error.
Table 7-13. Commands
Setting
Control Source
Under Host Control, an output GPIO outputs the PWM at 'Off
PWM'.
0
Host Control
To change the PWM seen at the pin, the value of 'Off PWM’ is
changed.
Alternatively, the host may switch from 'Off PWM' to 'On PWM'
by setting the 'Invert' bit of the CTRL field
1
Key
If the control source is 'Key' or 'GPIO' then when the source
Object is 'ON' then the GPIO outputs its 'ON PWM', when the
source object is 'Off' then the GPIO outputs its 'OFF PWM'.
'On' and 'Off' states of control sources may be reversed by
setting the GPIO's 'Invert' bit.
4
GPIO
SOURCE INSTANCE: The instance of an object which controls the GPIO in Output mode.
7.3.2
Messages
The message data for a GPIO Configuration T29 object is shown in Table 7-14.
Table 7-14. Message Data for SPT_GPIO_T29
Byte
Field
0
REPORT ID
1
GPIOSTATE
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TYPE
STATE
REPORT ID
Reserved
REPORTID Field
This field contains the report ID for the message. Messages contain report IDs to allow the host to identify the
type of message and its originator. Report IDs are assigned to any object that can send messages. See Section 2.4.6 on page 5 for more information on the assignment of report IDs.
GPIOSTATE Field
This field indicates whether the GPIO is an input or an output and also whether it is turned on or off.
STATE:
0 = Off / Low
1 = On / High
TYPE:
0 = Input
1 = Output
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
28
7.4
Haptic Event (SPT_HAPTICEVENT_T31)
A Haptic effect is a sequence of motor actions that provide tactile feedback to the user (that is, the feeling of a
physical button press may be conveyed when a touch sensor is touched). There are 14 pre-configured effects
provided by the QT1085 (see Table 7-16 on page 29).
The Haptic Event T31 object allows for configuration of the effect to be played under a given circumstance (the
source condition).
The QT1085 provides eight instances of the Haptic Event T31 object, allowing for different tactile feedback effects to
be played, depending on the touched key or other control.
The control source for each enabled GPIO is checked once per cycle (ACTIVE or IDLE) so the effect is started
during the following cycle after the control source has made a state transition from OFF to ON.
The effect is started at an OFF to ON transition of the control source state. The effect stops either upon completion of
the effect or where the trigger state (that is the On state of the control object) is negated.
7.4.1
Configuration
Table 7-15. SPT_HAPTICEVENT_T31
Byte
Field
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
0
CTRL
DISSTART
DISFINISH
LOOP
–
–
–
RPTEN
ENABLE
1
EFFECT
–
2
SOURCE
EFFECT TO PLAY
SOURCE TYPE
SOURCE INSTANCE
CTRL Field
ENABLE: Enables the use of this object. The object is enabled if set to 1, and disabled if set to 0.
RPTEN: Allows the object to send status messages to the host through the message processor. Reporting is
enabled if set to 1, and disabled if set to 0. Events must be enabled for this bit to have an effect.
LOOP: This enables the effect to be continuously repeated for a stated trigger condition. When set to a 1 the
effect can be repeated for a long as the trigger condition exists.
DISFINISH / DISSTART: You may not want to generate a message at the start or finish of an operation.

To not generate a message to the host at the finish, set DISFINISH to 1.

To not generate a message to the host at the start, set DISSTART to 1.
Note:
If RPTEN is disabled then the DISFINISH / DISSTART settings have no effect.
EFFECT Field
EFFECT TO PLAY: This designates the ID of the desired effect. See Table 7-16) for a preconfigured selection
of haptic effects available on the device.
Table 7-16. Preconfigured Haptic Effects
ID
Type of Effect
1
Strong Click
2
Strong Click at 60% strength
3
Strong Click at 30% strength
4
Sharp Click
5
Sharp Click at 60% strength
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
29
Table 7-16. Preconfigured Haptic Effects (Continued)
ID
Type of Effect
6
Sharp Click at 30% strength
7
Soft Bump
8
Soft Bump at 60% strength
9
Soft Bump at 30% strength
10
Double Click
11
Double Click at 60% strength
12
Triple Click
13
Soft Buzz
14
Strong Buzz
SOURCE Field
SOURCE INSTANCE: This is the number of instances of the object referred to in the Source Type. The
options for the Source Instance depend on the Source Type (see Table 7-17 on page 31):

If the Source Type is Touch Key, then Source Instance is 0 to 7 (number of keys).

If the Source Type is GPIO, then Source Instance is 0 to 15 (number of GPIO lines).
SOURCE TYPE: The type of object which triggers the haptic event to play (see Table 7-17 on page 31).
For a Source type Key or GPIO the haptic event is triggered by an Off to On transition of the source object
state.
Selection of an object type that does not exist on the device generates a Config error.
To play a haptic under direct host control:
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
30
1.
Set the Source Type to 0.
2.
Set the Source Instance to any non-zero value. The effect will play once, generating Start and Stop
messages, if enabled.
3.
To play the effect again, reset the haptic event by setting the Source Instance to 0. After a reset of the
haptic event, the host must wait at least 1 cycle time (Active or Idle) for the reset to be applied before
the effect may be replayed.
4.
Repeat steps 1 and 2.
Table 7-17. Source Type
Setting
0
Host Control
1
Key
2–3
4
Reserved
GPIO
5–7
7.4.2
PWM
Reserved
Configuration Checks
A Haptic Event T31 object causes a configuration error in the following circumstances:

If the selected effect does not exist on the device.

For the QT1085 this means that if a preconfigured effect number greater than 14 is selected.
If the selected source object does not exist.

If the selected source object is not enabled.
A configuration check may determine that a configuration error has occurred (for example, if a setting is set outside
of its allowed range or a conflict has occurred between two settings) (1). This is signaled to the host (see Section 7.4.3
on page 31). The device halts until the error has been corrected. To fix the error, check that all the object settings are
within their allowed limits, as stated in the field descriptions.
Checks will be carried out on enabled objects at power-on or reset and when configurations are changed.
Note:
7.4.3
On the QT1085, checks are carried out on all enabled objects when any configuration is changed.
Messages
The message data for a Haptic Event T31 object is shown in Table 7-18.
Table 7-18. Message Data for SPT_HAPTICEVENT_T31
Byte
Field
0
REPORT ID
1
HAPTICSTATE
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
REPORT ID
–
STATE
1. While the object is disabled, however, potential configuration errors are allowed.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
31
REPORT ID Field
REPORT ID: This field contains the report ID for the message. Messages contain report IDs to allow the host
to identify the type of message and its originator. Report IDs are assigned to any object that can send messages. See Section 2.4.6 on page 5 for more information on the assignment of report IDs.
HAPTICSTATE Field
STATE: This indicates whether or not the haptic effect is still playing or has finished.
0 = Inactive (finished)
1 = Active (playing).
Note:
If a haptic effect is playing when the device enters Deep Sleep mode, the effect is paused. When
Deep Sleep mode is negated (by writing a nonzero setting to the appropriate field in the Power
Configuration T7 object) the haptic effect is resumed and continues until either the effect is
complete or the control source's ON state is negated.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
32
Appendix A. Checksum Calculation
A.1
24-bit CRC
A.1.1
Introduction
The device uses a 24-bit cyclic redundancy check (CRC) in the following place:

To check the integrity of the main Information Block for the device
This CRC checksum allows the host to be confident that the memory map layout has been read over the
communications bus correctly.
Note:
A.1.2
The C code in this appendix uses the type declarations uint8_t, uint16_t and uint32_t for 8-bit, 16bit and 32-bit integers respectively.
24-bit CRC Algorithm
Each checksum is generated by running an algorithm which takes two new bytes of data and combines them with
the current checksum to produce a new checksum value.
The sample code below shows how to calculate the checksum for each 16-bit word in a byte stream.
uint32_t crc24(uint32_t crc, uint8_t firstbyte, uint8_t secondbyte)
{
static const uint32_t crcpoly = 0x80001b;
uint32_t result;
uint16_t data_word;
data_word = (uint16_t)((uint16_t)(secondbyte << 8u) | firstbyte);
result = ((crc<<1u) ^ (uint32_t)data_word);
if(result & 0x1000000) // If bit 25 is set
{
result ^= crcpoly;// XOR result with crcpoly
}
return result;
}
The checksum routine is called iteratively to calculate the CRC two bytes (16-bit word) at a time. This means that two
bytes must be read from the device before performing each iteration of the checksum. Therefore, if an odd number of
bytes is read from the device, the host checksum code should add a zero byte to the end of the byte stream to make
the sequence even. For example, if the following stream of 7 bytes is received from the device:
byte1 — byte2 — byte3 — byte4 — byte5 — byte6 — byte7
The checksum could be calculated as follows:
uint32_t CRC = 0;
CRC = crc24(CRC, byte1,
CRC = crc24(CRC, byte3,
CRC = crc24(CRC, byte5,
CRC = crc24(CRC, byte7,
CRC = CRC & 0x00FFFFFF;
byte2)
byte4)
byte6)
0)
/* <- zero added for the last checksum */
/* <- mask the 32-bit result to 24-bit */
An alternative method of calling the CRC calculation function is to use a loop, as shown in Section A.1.3
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
33
Table A-1 shows an example block of eight bytes and the CRCs these generate. The bytes consist of seven data
bytes plus an additional zero byte to even up the count. You can use the data in this table to verify the validity of any
coded CRC routine.
Table A-1.
Example CRC Calculations for 24-bit CRC
Byte Pairs
A.1.3
First Byte
Second Byte
CRC Calculation Result
0x0
0xFF
0xFF00 (Intermediate CRC – partial calculation)
0x11
0xEE
0x11011 (Intermediate CRC – partial calculation)
0x22
0xDD
0x2FD00 (Intermediate CRC – partial calculation)
0x33
0xCC
0x53633 (Intermediate CRC – partial calculation)
0x44
0xBB
0xAD722 (Intermediate CRC – partial calculation)
0x55
0xAA
0x150411 (Intermediate CRC – partial calculation)
0x66
0x99
0x2A9144 (Intermediate CRC – partial calculation)
0x77
0x88
0x55AAFF (Intermediate CRC – partial calculation)
0x88
0x77
0xAB2276 (Intermediate CRC – partial calculation)
0x99
0x66
0xD6226E (Intermediate CRC – partial calculation)
0xAA
0x55
0x2C116D (Intermediate CRC – partial calculation)
0xBB
0x44
0x586661 (Intermediate CRC – partial calculation)
0xCC
0x33
0xB0FF0E (Intermediate CRC – partial calculation)
0xDD
0x22
0xE1DCDA (Intermediate CRC – partial calculation)
0xEE
0x11
0x43A841 (Intermediate CRC – partial calculation)
0xFF
0x00
0x87507D (Expected CRC – final calculation)
Information Block Checksum
The checksum for the Information Block should be calculated by the host on start-up when the Information Block is
first read. This should be compared to the checksum value at the end of the Information Block. If there is a mismatch,
an error has occurred.
The following code shows how to use the example crc24() function given in Section A.1.2 on page 33 to calculate
the CRC checksum for the Information Block.
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
34
uint32_t crc = 0;
uint16_t crc_area_size;
uint8_t *mem;
uint8_t i;
uint8_t status;
/* Calculated CRC */
/* Size of data for CRC calculation */
/* Data buffer */
/* 7 bytes of version data, 6 * NUM_OF_OBJECTS bytes of object table. */
crc_area_size =
ID_INFORMATION_SIZE +
info_block>info_id.num_declared_objects *
OBJECT_TABLE_ELEMENT_SIZE;
mem = (uint8_t *) malloc(crc_area_size);
if (mem == NULL)
{
/* Handle error */
}
/*
* Read the data using a function written for this purpose
* Here, it is assumed that the function is named read_mem()
* and that it returns a status code with the value READ_MEM_OK.
* It is assumed to have the following prototype:
* uint8_t read_mem( uint16_t Address, uint8_t ByteCount, uint8_t *Data )
*/
status = read_mem(0, crc_area_size, mem);
if (status != READ_MEM_OK)
{
/* Handle error */
}
/*
* Call the CRC function crc24() iteratively to calculate the CRC,
* passing it two bytes at a time.
*/
i = 0;
while (i < (crc_area_size - 1))
{
crc = crc24(crc, *(mem + i), *(mem + i + 1));
i += 2;
}
/*
* Call the crc24() with the final byte,
* plus an extra 0 value byte to make the sequence even.
*/
crc = crc24(crc, *(mem + i), 0);
free(mem);
/* Final result */
crc = (crc & 0x00FFFFFF);
result to 24-bit */
A.2
8-bit CRC
A.2.1
Introduction
/* <- mask the 32-bit
An 8-bit CRC can be used in the following place:
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
35

A.2.2
To check the integrity of data in messages from the Message Processor when receiving messages (see
Section A.2.3 on page 36).
8-bit CRC Algorithm
The sample code below shows how to calculate the 8-bit checksum.
uint8_t crc8(unsigned char crc, unsigned char data)
{
static const uint8_t crcpoly = 0x8c;
uint8_t index;
uint8_t fb;
index = 8;
do
{
fb = (crc ^ data) & 0x01;
data >>= 1;
crc >>= 1;
if (fb)
crc ^= crcpoly;
} while (--index);
return crc;
}
A.2.3
Reading the CRC for the Message Processor Data
The following code shows how to use the example crc8() function given in Section A.2.2 on page 36 to calculate
the CRC checksum for the data in the Message Processor T5 object.
uint8_t crc = 0;
uint8_t data_in;
for(i=0; i<MESSAGEPROCESSOR_SIZE; i++)
{
data_in = read_byte();
crc = crc8(crc, data_in);
}
if(crc == 0)
{
/* CRC is OK - do something appropriate */
crc_pass();
}
else
{
/* CRC failed - handle error */
crc_fail();
}
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
36
Appendix B. Locating Configuration Errors
Figure B-1 shows the algorithm for locating configuration errors. See Section 2.6 on page 7 for more information on
the configuration checks performed by the device.
Figure B-1.
Algorithm for Locating Configuration Errors
Start
Use Command Processor T6 to
perform backup then a reset
If
configuration
error
0
1
Disable all objects that have a
CTRL field with an ENABLE bit
Re-enable next object
Check all fields are within range
(see Object Configuration Checks
Table)
1
If
Configuration
error
0
0
If
Last Object
1
Finish
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
37
Associated Documents

Datasheet: AT42QT1085 – QTouch 8-key Touch Sensor IC
Revision History
Revision Number
History
Revision AX – June 2011
Initial release
Revision BX – December 2011
Revision C – May 2013
Firmware revision 10.AA.
Various amendments to existing objects and deletion of others.
Amendments and clarifications to text
Applied new template
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
38
Notes
AT42QT1085 [DATASHEET]
9626C–AT42–05/3013
39
Atmel Corporation
1600 Technology Drive
Atmel Asia Limited
Unit 01-5 & 16, 19F
Atmel München GmbH
Business Campus
Atmel Japan G.K.
16F Shin-Osaki Kangyo Bldg
San Jose, CA 95110
BEA Tower, Millennium City 5
Parkring 4
1-6-4 Osaki, Shinagawa-ku
USA
418 Kwun Tong Roa
D-85748 Garching bei München
Tokyo 141-0032
Tel: (+1) (408) 441-0311
Kwun Tong, Kowloon
GERMANY
JAPAN
Fax: (+1) (408) 487-2600
HONG KONG
Tel: (+49) 89-31970-0
Tel: (+81) (3) 6417-0300
www.atmel.com
Tel: (+852) 2245-6100
Fax: (+49) 89-3194621
Fax: (+81) (3) 6417-0370
Fax: (+852) 2722-1369
© 2013 Atmel Corporation. All rights reserved. / Rev.: 9626C–AT42–05/3013
Atmel®, Atmel logo and combinations thereof, Adjacent Key Suppression®, AKS®, QTouch® and others are registered trademarks or trademarks of Atmel
Corporation or its subsidiaries. Other terms and product names may be registered trademarks or trademarks of others.
Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this
document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL
ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF
INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no
representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any
time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be
used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.
Similar pages