Synaptics RMI Interfacing Guide
Synaptics RMI Interfacing Guide
Copyright
Copyright © 2008 Synaptics Incorporated. All Rights Reserved.
Trademarks
Synaptics, the Synaptics logo, Synaptics OneTouch, ClearPad, EdgeMotion, LightTouch, LuxPad, MobileTouch, NavPoint,
PalmCheck, RoundPad, ScrollStrip, TouchPad, and TouchStyk are trademarks of Synaptics Incorporated.
All other brand names or trademarks are the property of their respective owners.
Notice
Information contained in this publication is provided as-is, with no express or implied warranties, including any warranty of
merchantability, fitness for any particular purpose, or non-infringement. Synaptics Incorporated assumes no liability whatsoever
for any use of the information contained herein, including any liability for intellectual property infringement. This publication
conveys no express or implied licenses to any intellectual property rights belonging to Synaptics or any other party. Synaptics
may, from time to time and at its sole option, update the information contained herein without notice.
Term Meaning
$ Hexadecimal numbers are marked with a leading ‘$’ sign: The number $7FF is equal to 2047 decimal.
italics Italicized words introduce a term described in the adjacent text or in the Glossary.
Reserved Reserved is used to signify a bit or bit-field not currently used in any (published) way.
Courier Courier font is used for text to be entered on a command line or in a program, or for text output from a device.
Contents
1. INTRODUCTION............................................................................................................... 5
1.1. Conventions used in RMI documentation.............................................................. 5
2. THE STRUCTURE OF RMI .............................................................................................. 6
2.1. Registers ............................................................................................................... 6
2.1.1. Register map ............................................................................................. 7
2.2. RMI functions ........................................................................................................ 8
2.2.1. Function numbers ...................................................................................... 8
2.3. RMI physical layer operations ............................................................................... 9
2.3.1. Writing registers......................................................................................... 9
2.3.2. Reading registers....................................................................................... 9
2.3.3. Signaling attention and interrupts ............................................................ 10
2.3.4. Spontaneous resets................................................................................. 10
2.4. Kinds of RMI registers ......................................................................................... 11
2.4.1. Control registers ...................................................................................... 11
2.4.2. Status registers........................................................................................ 12
2.4.3. Query registers ........................................................................................ 12
2.4.4. Data registers .......................................................................................... 12
2.4.5. Command registers ................................................................................. 12
2.5. Data reporting...................................................................................................... 13
2.5.1. Data source numbering ........................................................................... 13
2.5.2. Interrupt Request ..................................................................................... 15
2.5.3. Device Status register.............................................................................. 15
2.5.4. Attention signal ........................................................................................ 16
2.5.5. Data register page ................................................................................... 17
2.5.6. Data coherence ....................................................................................... 18
2.6. Standard control, command, and status registers ............................................... 19
2.6.1. Register $0000: Device Control register.................................................. 19
2.6.2. Register $0001: Interrupt Enable register................................................ 22
2.6.3. Register $0002: Error Status register ...................................................... 22
2.6.4. Register $0003: Interrupt Request status register ................................... 24
2.6.5. Register $0004: Device Command register............................................. 24
2.7. Standard query registers ..................................................................................... 25
2.7.1. Register $0200: RMI Protocol Version query .......................................... 26
2.7.2. Register $0201: Manufacturer ID query................................................... 26
2.7.3. Register $0202: Physical Interface Version query................................... 26
2.7.4. Register $0203: Product Properties query............................................... 27
2.7.5. Registers $0204–$0207: Product Info query ........................................... 27
2.7.6. Registers $0208–$020D: Device Serialization queries............................ 27
2.7.7. Registers $0210–$021F: Product ID queries........................................... 29
2.7.8. Registers $0310–$037F: Function Presence queries.............................. 29
2.8. Function-specific registers................................................................................... 30
3. STANDARD RMI FUNCTIONS ....................................................................................... 31
3.1. Function $10: 2-D TouchPad sensors ................................................................. 32
3.1.1. Number of 2-D sensors............................................................................ 32
3.1.2. Register page layout................................................................................ 33
3.1.3. Query registers ........................................................................................ 33
3.1.4. Control registers ...................................................................................... 36
3.1.5. Data registers .......................................................................................... 38
3.1.6. Interrupt Requests ................................................................................... 44
3.2. Function $13: Scroller ......................................................................................... 45
3.2.1. Number of scrollers.................................................................................. 45
3.2.2. Register page layout................................................................................ 45
1. Introduction
This document defines a register-oriented protocol for use in Synaptics® embedded products. The overall
protocol is known as RMI: the Register Mapped Interface. RMI uses a “register map” model that is
convenient and familiar to host system developers.
1. To support a large and varied product line, with an emphasis on forward-, backward-, and cross-
compatibility and consistency among Synaptics products;
2. To employ industry-standard I2C, SMBus, and SPI-based interfaces, following the familiar and
easy-to-use “register” model that is commonly found in devices with these interfaces; and
3. To be easy to document, easy to understand, and easy to use from the perspective of
implementers of RMI drivers and systems incorporating RMI devices. RMI is designed so that
any given RMI product can be documented concisely. For example, the numbering of functions
and data sources is elaborate when considering the RMI protocol as a whole, but in each specific
RMI device the resulting register map is straightforward and easy to use.
Each RMI product uses a particular physical interface (I2C, SPI, or SMBus) to access a particular register
set tailored to the product. But RMI itself is a platform protocol that ties together the common aspects of
all physical interfaces and all register maps of Synaptics’ various embedded products.
All signed quantities in RMI are expressed in two’s complement binary notation, where the most
significant bit is taken as a sign bit. For example, a signed 8-bit byte is $00 to encode 0, $7F to encode
+127, $80 to encode –128, and $FF to encode –1. A signed 6-bit register field would be $00 to encode 0,
$1F to encode +31 (the largest value that can be encoded in a signed 6-bit field), $20 to encode –32 (the
smallest value that can be encoded), and $3F to encode –1.
For a tutorial about a particular device, or information about initiating communication, please see the
relevant Quickstart guide.
Note: Not all features described in this RMI Interfacing Guide are supported by every device. Consult the
Product Specification or other device-specific documentation to find out which options are supported by a
particular device.
For systems with multiple hosts or multiple devices, RMI relies on the arbitration and addressing
mechanisms of the underlying physical interface. For example:
• In SPI-based RMI systems with multiple devices, the host might generate a separate SSB signal
for each device.
• In I2C or SMBus-based RMI systems with multiple hosts, the hosts might use bus arbitration and
repeated-Start transactions to negotiate safe shared access to a device.
2.1. Registers
RMI is defined in terms of logical registers. The host communicates with the device by reading and
writing the device’s registers through physical interface transactions.
All registers in RMI are 8 bits wide. Quantities larger than a byte are held in several consecutive registers
which are typically read or written as a group.
Certain multi-byte quantities may require that the host must write them as a group. For such quantities,
writing to any byte but the last simply stores the data written in a holding area, and writing to the final
(highest-addressed) byte of the quantity stores the byte written, plus the held data, into the multi-byte
quantity. This restriction applies only to a rare few multi-byte quantities in RMI; most registers can be
written as independent bytes even if they are part of larger structures.
Similarly, certain multi-byte quantities may require that the host must read them as a group. For such
quantities, reading from the first (lowest-addressed) byte reads the entire quantity into a holding area and
reports the first byte of the held data. Reading any byte after the first reports the saved data from the
holding area. This restriction applies only to a rare few multi-byte quantities in RMI; most registers can
be read as independent bytes even if they are part of larger structures.
Note: Currently, RMI does not include any registers that must be read as a group in this sense. The data
registers have their own more specialized rules for ensuring data coherency; see section 2.5.6.
Registers are identified by 15-bit addresses. Where ‘$’ signifies hexadecimal notation, the register
addresses range from $0000 to $7FFF. Each address in this range potentially identifies one byte of
register data. Only a sparse few of the 32768 potential addresses are actually implemented; other
addresses are marked reserved as defined in section 2.3.
The register address space is divided into pages of related registers. Each page consists of 256 registers in
the range $xx00–$xxFF.
Addresses $0000–$00FF and $0200–$03FF are used for registers whose definitions are universal among
all RMI devices. The first page contains standard control, command, and status registers, which are
described in section 2.6. The other two pages contain standard queries, which are described in section 2.7.
Addresses $0100–$01FF are reserved for use by each physical layer for any registers specific to the
physical layer (if any).
Addresses $0400–$04FF are used for data registers. Section 2.5 describes the general conventions for data
registers, and the documentation for each function describes the specific layouts of the relevant data
registers.
Addresses $0800–$0BFF are generally reserved for assignment by future versions of the RMI standard.
Addresses $0C00–$0FFF are reserved for use by the device manufacturer for proprietary registers,
diagnostic mechanisms, etc.
Addresses $1000–$7FFF are assigned in pages of 256 registers to various optional functions of RMI
devices. The properties of RMI functions are described generally in section 2.2, and the various standard
RMI functions are documented in section 3.
Functions are consistently defined among all devices that include them. For example, Function $22
always corresponds to brightness-controlled LEDs, and the registers associated with Function $22 are
defined in a consistent way in all RMI devices that include LEDs. For devices that lack the brightness-
controlled LED function, the register addresses associated with Function $22 are unused.
Some RMI functions are completely universal, with a fixed definition that is identical in any product that
includes them. Other RMI functions represent more general capabilities, with parameters that may be
chosen differently from one product to another. For example, the 1-D Sensor function (RMI Function
$14) may involve one linear strip sensor in one product, and two closed-loop sensors in another.
Function numbers $7C through $7F are reserved for definition by particular products. Functions $7C–$7F
are not required to be, and typically will not be, consistent from one RMI product to another. Instead,
products with a unique feature not likely to appear in other products can implement this feature as
functions in the $7C–$7F range without permanently crowding the space of standard function numbers.
Multi-purpose drivers and diagnostic tools should treat Functions $7C–$7F as unknown, unrecognized
functions unless they recognize the specific Product ID.
Function numbers less than $7C are intended to be universally consistent among all RMI devices: If two
different products both contain a function numbered $xx, this means that both contain the “same” function
in some sense, and the behavior of function number $xx in both devices follows the same general
specification. Synaptics Incorporated (contact: sales@[Link]) is responsible for maintaining a
registry of RMI function number assignments.
The function number forms a base address for registers associated with the function. The Function
Presence query register for Function $xx goes at address $03xx, and any other registers that are specific
to Function $xx go in the address range $xx00–$xxFF. For example, the Function Presence query register
for LEDs (Function $22) has address $0322, and the other registers related to LEDs have various
addresses in the range $2200–$22FF.
Note: Some physical interfaces, such as the RMI implementation of SMBus, provide facilities for
accessing common registers using 8-bit addresses (see, for example, section 4.2.1). The last address of
each page, $xxFF, is specifically reserved for use by the physical layer. For example, RMI on SMBus
uses this address for a Page Selection register.
A single register write operation may not span more than one register page. In other words, the N
consecutive registers covered by a given write operation must have addresses that differ only in the low
8 bits. It is an error if the host performs a write operation that spans multiple pages; the effect is undefined
and implementation-dependent.
As a special case, a write operation that sets bit 0 of register $0004 to ‘1’ (the Reset command) must write
only to register $0004 and only to set bit 0. Most physical layers define a holdoff time after the Reset
command before the host can again reliably access the RMI interface. (Non-resetting writes to register
$0004, where bit 0 is written as ‘0’, are no more constrained than other ordinary RMI write operations.)
The end of the N-register write transaction must be an event distinguishable by the device, in order to
support register semantics such as those described in section 3.5.4. (For example, for SPI this is the rise of
the SSB signal.)
A physical layer may have limits on the number of consecutive registers that may be read in a single
operation. See the section describing your selected physical layer in section 4 for more information. A
single register read operation may not span more than one register page (in the sense defined above in
section 2.3.1).
The beginning and end of the N-register read transaction must be events distinguishable by the device,
for reasons described in section 2.5.6. (For example, in SMBus these events are the Start and Stop
conditions, and for SPI these are the fall and rise of the SSB signal.)
Preferably, the physical layer will allow the host to choose to adjust dynamically the number N of
registers that it reads based on the first few data bytes it has read. However, RMI never requires the host
to perform a read operation of non-fixed size, because some hosts lack this ability (for example, because
of restrictions in their OS drivers).
Spontaneous resets on the device side are a fact of life in many capacitive touch sensor designs. Touch
sensors, by their nature, are more exposed than most electronics to disruption by ESD (electrostatic
discharges) during operation, particularly if the sensor area is framed by an open bezel instead of being
under solid, uninterrupted plastic. Synaptics chips are designed to ensure that any such disruption results
in a clean reset of the chip. The RMI protocol is designed to allow the system to recover gracefully in the
event of such a spontaneous device reset. Together, these designs allow robust touch sensing even in
ESD-prone or otherwise glitchy environments.
Spontaneous resets on the host side are also a fact of life in embedded systems. If the host restarts
suddenly, it may not have had time to shut down the peripherals in an orderly way. An RMI device should
be prepared to accept a “reset” command (in the case of RMI, a write of $01 to register address $0004) no
matter what was happening earlier, even if a previous RMI physical layer transaction was interrupted
partway through, and even if a special command or mode was already in progress on the device.
Several properties of RMI are designed to work together to allow the host to detect reliably when the
device has reset itself spontaneously:
• Every implemented interrupt enable bit is ‘1’ after reset (see Section 2.6.2).
• The attention signal will prompt the host to read the data registers as if new data had arrived.
• When the host reads the Device Status register, it will see a ‘0’ in the Configured Flag. Because
the host knows it has already configured the device, it can infer that the device has lost its
configuration due to a spontaneous reset.
The host should respond to a spontaneous device reset by fully reinitializing the device. Depending on the
nature of the overall system, the host may even wish to use a spontaneous reset in one RMI device as a
cue to reinitialize other parts of the system.
Hosts that operate the device in its default configuration, without ever writing to any control registers,
will not necessarily be able to detect a spontaneous reset because the Configured Flag will always be ‘0’.
However, these hosts need not be cognizant of spontaneous resets; from their point of view, the resetting
device will simply pause briefly in its reporting of sensor activity and then resume normal operation.
Control registers generally do not change except when explicitly written by the host. However, this is
merely a guideline and not a strict requirement: An RMI product or function may define control-like
registers that change for other reasons, although often such registers might better be treated as status
registers (see section 2.4.2).
Each control register has a defined reset value. When the device resets for any reason, all the control
registers revert to their reset values.
Writing to a control register generally affects some aspect of the device’s operation, either immediately
or at a later time. Some control registers may also have side effects upon writing. For example, some
registers may cause the touch sensors to be recalibrated as a side effect of being written by the host, and
some registers may cancel and restart the sensor measurement cycle (the report period of section 2.6.1)
when written. Any such side effects are described in the documentation for the register.
A control register typically holds some parameter that configures the device. Some parameters use
several registers; for example, registers $1046 and $1047 together hold the Max Position parameter of a
Function $10 sensor. Other parameters take just one or a few bits of a register; for example, register
$0000 contains the Report Rate and Sleep Mode parameters in different bit fields of the register.
Sometimes the fixed properties of a particular device, such as the number of strip sensors in Function $14,
are also referred to in RMI as parameters. All the parameters (both fixed and adjustable) of an RMI
device are together called the configuration of the device.
Some parts of a control register may be marked reserved or “—”, and some whole registers in a group
of control registers may be reserved. Reserved bits normally reset to ‘0’; these bits may harmlessly be
written to ‘0’, but the behavior of the device is undefined if the host writes a reserved bit to ‘1’. For
example, some reserved control bits may activate undocumented or proprietary features of the device
when written to ‘1’, and those undocumented features may change without notice from one version of the
product to another.
Similarly, some possible settings of a control register may be marked reserved, and the behavior of the
device is undefined if the host sets a register to a reserved value.
Some control registers or parts of control registers are implemented only in some versions or models of a
device. When a control register is unimplemented, it will reset to a suitable value reflecting the fixed
behavior that is implemented in its place (for example, a fixed sensitivity setting, or a fixed ‘0’ enable bit
for an unimplemented mode). At the implementation’s discretion, an unimplemented register or register
bit may be treated as a query register (where writes are ignored regardless of the data written), or as a
control register that does nothing (where writes change the contents of the register but have no other
effect on the device). In all cases, writes to unimplemented control bits are harmless.
Similarly, some possible settings of a control register may be unimplemented in some versions or models
of a device; writing a control register to a setting that is unimplemented on the device has an undefined
effect, but the effect is generally harmless and most often corresponds to one of the implemented settings
of the register.
Reserved status bits typically read as ‘0’, but the host should ignore reserved status bits for forward
compatibility with future RMI devices that might use these bits for additional status information.
Query registers typically report constant data read from ROM on the device, but some queries may
depend on the way the device is configured (for example, the Sensor Resolution of Functions $10 and
$14). For more about query registers, see section 2.7.
The host should not write to a query register, but in any case writes to query registers are ignored.
Reserved query bits typically read as ‘0’, but the host should ignore reserved query bits for forward
compatibility with future RMI devices that might use these bits for additional query information.
Some parts of some data registers are marked reserved; host software should always ignore these bits.
RMI devices typically will report ‘0’ in all reserved data register bits, but the host should not rely on this.
Command register bits are special in that the host can only write them from ‘0’ to ‘1’: Writing a ‘0’ to a
command bit leaves the state of the bit untouched by the write operation. Writing a ‘1’ to a command bit
issues the command. The command bit automatically clears to ‘0’ when the command completes.
Some commands may complete instantaneously; their bits will never read as ‘1’. Other commands may
take some time to complete; their bits read as ‘1’ while the command is in progress. After issuing a
command, the host may read back the command register repeatedly, at an interval suitable for the
command, if it wishes to see how long the command is taking to complete. Or, the host may proceed
immediately knowing that the command will execute in due course. In many cases there is no technical
reason that the host must know when the command completes; by allowing the host to proceed
immediately in these cases, RMI allows host drivers to use a simple, largely “stateless” design.
Certain command register bits may also be set to ‘1’ by the device itself. RMI does not define what
happens if a ‘1’ is written to a command bit that is still ‘1’ from a previous posting of the same command.
The behavior depends on the particular command and function. For this reason, the host should never read
the command register and write back a value derived from the data that was read. Instead, the host should
typically write a “command code” as described above.
It is acceptable to write a ‘1’ to one command bit when other command bits are already ‘1’ due to
previously posted, still-pending commands. The result is that several commands will be posted at once.
The order in which the device executes these pending commands is implementation-defined, and may not
be the same as the order in which the commands were posted. In situations where the order of command
execution is significant, the host should read and wait until the command register becomes $00 before
writing a new command.
The Reset bit of command register $0004 is irregular in that the device will reset, and the RMI host
interface will go “off the air,” when the reset command is posted. Therefore, it is not meaningful to read
register $0004 to wait for completion of the reset command, nor to post another command at the same
time as a reset command is pending.
Unused bits in a command register are marked reserved or unimplemented. The host must never write a
‘1’ to a reserved or unimplemented command bit. For example, some reserved command bits may
activate undocumented or proprietary features of the device when written to ‘1’ and these undocumented
or proprietary features are subject to change without notice. Reserved or unimplemented command
register bits, and wholly reserved or unimplemented command registers, are not required to behave as
described in this section when written to ‘1’.
For example, as illustrated in Figure 1, if product A contains a 1-D strip sensor (Function $14), a group of
capacitive buttons (Function $18), and a group of GPIOs (Function $20), these would be data sources
0-and-1, 2, and 3, respectively. (Each 1-D strip contributes two data sources, one absolute and one
relative.) In a product B that was like A but lacking capacitive buttons, the GPIOs would be source 2
instead of source 3. In a product C that was like A but with two 1-D strip sensors, the two strips would be
sources 0-and-1 and 2-and-3, respectively, the capacitive buttons would be source 4, and the GPIOs
would be source 5.
Product C of this example would use these fixed data source numbers even if it were a OneTouch-style
device with the potential for two strips, each of which could be enabled or disabled at run-time. The data
registers for a disabled strip would still be present in page $04xx, although of course they would not
contain interesting data when their associated sensor is disabled.
Figure 1 also illustrates the layout of the data registers on address page $04xx for these examples; data
register addresses are described in section 2.5.5. Figure 1 assumes there are between 9 and 16 capacitive
buttons and between 1 and 8 GPI pins, so that Function $18 has two data registers and Function $20 has
one data register.
Source 2: Source 4:
Function $18 Button data Button data
Regs $0405–$0406 Regs $040A–$040B
Source 3:
Rel strip #1
Register $0409
Source 2:
Abs strip #1
Regs $0405–$0408
Function $14
Source 1: Source 1: Source 1:
Rel strip #0 Rel strip #0 Rel strip #0
Register $0404 Register $0404 Register $0404
Each data source maintains an independent interrupt request state bit. The Device Status register,
described in section 2.5.3, reports the interrupt request bits either separately or in summary, depending on
the total number of data sources in the device.
The interrupt request bit for a data source is ‘1’ if the data source has an interrupt request, or ‘0’ if there is
no interrupt request for the source. Once a source has an interrupt request and its interrupt request bit has
changed to ‘1’, the interrupt request bit remains at ‘1’ until the host reads data from the source, or (in
some products) the host takes other actions that are documented to clear the interrupt request state of the
data source.
The data registers always report meaningful data whether or not the interrupt request condition is present.
Most often, an interrupt request state of ‘0’ implies that the data registers are unchanged since the last
time the host read the data. However, some data sources may define a more selective “interrupt” criterion,
so that certain “insignificant” data changes may occur without causing interrupt request to be asserted.
Very simple hosts could even read the data registers by periodic polling, observing the data but
completely ignoring the interrupt request bits and the attention signal.
After device reset and before the data registers have been read for the first time, every data source has an
interrupt request status of ‘1’. This is true even for data sources corresponding to sensors with a “sensor
enable” control that resets to the “disabled” state. (The reason for this rule is explained in section 2.5.4.)
7 6 5 4 3 2 1 0
The bits of the Device Status register have the following meanings:
Combined interrupt requests for data sources 4 and above (Device Status register bit 4)
This bit is ‘1’ if any data source numbered 4 or higher has an interrupt request, or ‘0’ if
none of the high-numbered data sources have interrupt requests. For devices with fewer
than five data sources, this bit always reads as ‘0’. For devices with more than five data
sources, this bit effectively reads the logical OR of the high-numbered interrupt request bits.
For devices with exactly five data sources, this bit is simply the interrupt request bit for
data source 4.
Interrupt request for data sources 3, 2, 1, and 0 (Device Status register bits 3:0)
These bits report the interrupt request states of the four lowest-numbered data sources. If
there are N< 4 data sources, the bits numbered N up through 3, inclusively, always read
as ‘0’.
Synaptics can supply RMI devices in which the attention signal is active-high or active-low. The attention
polarity is a build-time option, not run-time configurable. The attention signal is said to be asserted if it is
in the state that alerts the host, which is high for active-high polarity or low for active-low polarity. The
attention signal is in the de-asserted state when it is not asserted.
The attention signaling mechanism is compatible with both level-triggered and edge-triggered interrupt
inputs on the host.
Register $0001 of every RMI device includes up to 8 interrupt enable bits, one bit per data source. For
devices with more than 8 data sources, the interrupt enable bits of the higher-numbered data sources are
held in registers in the address range $0020–$002F. Bits in registers $0001 and $0020–$002F that
correspond to data source numbers not present in a given device are unimplemented control bits in the
sense defined in section 2.4.1.
The attention signal is asserted whenever at least one data source has a ‘1’ in its bit of the interrupt enable
mask and its interrupt request bit is also ‘1’. The attention signal may become asserted or de-asserted if
the host writes to the control registers to change the interrupt enable bits.
Note that most data sources continue to work, and continue to operate their interrupt request bits, even if
their interrupt enable bit is ‘0’. The interrupt enable bit merely controls whether interrupt requests on a
source will send an attention signal to the host.
The host can disable attention by setting all the interrupt enable bits to ‘0’, thereby forcing the assertion
signal to its de-asserted level. This gives the host a way to “disable interrupts” on the device side. For
example, in a system where several devices’ attention pins have been logically OR’d together to drive a
host interrupt pin, the host might wish to disable interrupts from some of the devices while remaining
sensitive to other devices.
The data registers for data sources 0 through N–1 are assigned consecutive addresses starting at $0400.
For example, if source 0 has 3 data registers, source 1 has 1 data register, and source 2 has 3 data
registers, then source 0’s data registers have addresses $0400–$0402, source 1’s data register has address
$0403, and source 2’s data registers have addresses $0404–$0406.
The remainder of the data register page (addresses $0407–$04FF in the example above), is unused. Reads
to these unused data page addresses always return a dummy byte of $00.
To allow hosts to optimize their data accesses, some products may elect to provide additional data pages
with the data sources arranged in a non-standard order, perhaps as either a build-time or a run-time
option. For instance, in the example above, source 1’s data register might be visible at address $0500 as
well as $0403, and source 0’s data registers might be visible at addresses $0501–$0503 as well as $0400–
$0402. However, this feature is strictly optional, and RMI tools can rely on the fact that page $04xx is
always present and always ordered in the way defined by the RMI standard. The RMI standard itself
merely sets aside pages $05xx–$07xx for this general type of feature in case any product wishes to include
one.
The act of reading any of the data registers for a data source clears the interrupt request bit for that source.
When reading from the data register page, the reported Device Status register shows the interrupt request
bits from before any the interrupt request bits are cleared as a result of the read operation.
WARNING: If the host reads the several registers of a data source using several distinct read
transactions, the data are not guaranteed to be coherent. For example, if registers $0404–$0405 together
encode a 16-bit number that changes from $12F5 to $1307, a read of register $0404 followed by a
separate read of $0405 might return the very wrong value $1207. For this reason, at least for data sources
where coherence among register bytes can be an issue, it is strongly recommended to read related data
registers using a single multi-byte read transaction.
When a read transaction spans registers of more than one data source, each source will be read coherently,
but the sources are not guaranteed to be coherent with one another. For example, if a device has two 1-D
strip sensors as two sources, in some RMI device implementations a read transaction reading both strip
sensors together might occasionally report older data for the first strip and newer data from a later
measurement for the second strip.
Many RMI functions divide time into report periods that occur at a report rate, roughly
analogous to the “packet rate” of a mouse. If there are several such functions on an RMI
device that work in terms of report periods, all the functions schedule their operation to the
common report period of the device.
The encoding of the Report Rate field is largely device-dependent. The RMI standard does
not require any particular encoding. The reset value of the Report Rate field is also device-
dependent, and corresponds to the normal or preferred report rate for the device.
In most Synaptics touch module products, the Report Rate value ‘10’ encodes 80 report
periods per second, ‘01’ encodes 40 report periods per second, ‘00’ sometimes encodes a
device-specific slower rate, and ‘11’ sometimes encodes a device-specific faster rate. The
reset value of the Report Rate field is ‘10’ in most touch module products, but it may be
another value such as ‘01’ in some products.
RMI functions that work in terms of report periods assert interrupt requests, and therefore
also the attention signal, at most once per report period.
Usually, report periods happen at a steady rate. Some conditions may cause the report
period in progress to be canceled and a new report period started. This will not result in
any loss of data, but it will add a visible irregularity to the steady rate of reports. For
example, depending on the device implementation, writes to some control registers will
cancel and restart the report period.
Some RMI functions do not schedule their activity in terms of report periods; these are
known as asynchronous functions. Asynchronous RMI functions may assert an interrupt
request on any schedule depending on the needs of the function. If an RMI device contains
only asynchronous functions, its Report Rate field is unimplemented and resets to ‘00’ (as
described in section 2.4.1).
Note: Not all sleep modes are supported by every device. Consult the Product
Specification or other device-specific documentation to find out which sleep modes are
supported by the device.
This setting merely authorizes the device to doze when it is able. Most
products will be able to doze only under certain conditions, and will
automatically remain fully awake, for example, when a finger is present or
when pulse-width modulation for LEDs is active.
Most RMI devices can be left in the Normal Operation setting at all times.
Setting the Sleep Mode field to Sensor Sleep merely constitutes a request
to the device to enter the sleeping state. The device may continue to
operate in a higher-power state for a short time before it goes to sleep. In
particular, finger presence may still be reported for one or two more report
periods after Sleep Mode is set to Sensor Sleep.
All RMI devices support the Sensor Sleep state at least to the degree of
forcing the touch sensors to the “not touched” state. In many devices, the
Sensor Sleep state conserves additional power. In devices that do not
support this deeper sleeping mode, the Sensor Sleep state is identical to
Very-Low-Power Operation except for forcing the “not touched” state.
Even then, this mode may help to conserve overall system power by
interrupting the host less often.
The reset state of the Sleep Mode bits depends on the device. Most products default to the
Normal Operation state, but some (particularly those that do not implement fast tapping
gestures) may default to the Low-Power Operation state.
$0001 Int Enable 7 Int Enable 6 Int Enable 5 Int Enable 4 Int Enable 3 Int Enable 2 Int Enable 1 Int Enable 0
Each bit of this register controls whether the corresponding data source will assert attention when it has
an interrupt request. Bit n of this register is ‘1’ if the interrupt request on data source n should assert
attention, or ‘0’ if the interrupt request on source n should not affect the attention signal. See section
2.5.4.
Depending on the implementation, the effect on the Attention signal of a change to the interrupt enable
bits may be either immediate or deferred until the next report period.
Every interrupt enable bit for a present data source resets to ‘1’. Interrupt enable bits corresponding to
not-present data sources are unimplemented and reset to ‘0’.
Setting this field to all ‘0’ bits effectively disables the attention signal altogether.
If the device signals an error by reporting ‘1’ in the Error Flag bit of the Device Status register, this
register holds an error code byte in the range $01–$7F that identifies the kind of error. If several error
conditions arise at once, this register reports one of the extant errors; which one it reports is
implementation-dependent.
Error conditions created by host actions, such as invalid configurations of control bits, may be reported
instantly or they might not be reported until a few milliseconds after the offending register was written
(for example, error conditions might not be checked until the next report period). Similarly, if new data is
written to the control registers to correct the error condition, it may take a few milliseconds for the Error
Flag to clear.
Immediately after reset but before any error has occurred, the Error Flag will be ‘0’ and the Error Status
register will hold a reset code byte in the range $80–$FF. The reset code reports the reason that the device
was last reset. Some RMI devices will be unable to distinguish some or all of the reset reasons, in which
case they will report code $80 to show that the reason for the reset is unknown.
At any other time (when at least one error condition has occurred and been corrected since reset), the
contents of this register are undefined and uninteresting.
RMI defines the following standard error codes and reset codes:
Bit n of this register is ‘1’ if data source number n has an interrupt request, or ‘0’ otherwise. Note that bits
3:0 of this register are identical to bits 3:0 of the Device Status register; register $0003 is primarily of
interest when the device has many data sources and the host wishes to know exactly which of these
sources have data to report.
The device’s host interface (SMBus or SPI pins) may not operate for a certain amount of
time TRESC (about 1 ms) after a reset command or a low level on the RESET pin. This delay
will be much shorter than the delay TPOR before the host interface begins operating after a
power-on reset. The TRESC delay begins at the end of the write transaction that writes to
register $0002 (for example, at the rise of SSB in the case of RMI on SPI).
Note: The device will assert attention as soon as it is capable of responding to an operation
on its physical interface.
Most RMI hosts will be designed to work with a specific device, and these hosts can completely ignore
the query registers. The standard queries are more useful for diagnostic tools that need to work with a
wide variety of RMI devices, and for multi-purpose host drivers that must support a varied platform of
products or systems.
The query registers are read-only registers: They will always read the same data for a given device
configuration, and write operations to them by the host are ignored. In some products, certain queries may
depend on the settings of control registers or feature strapping pins on the device, but the queries will be
constant for a given setting of the control registers or strapping pins.
In devices that comply with the current version of RMI, queries marked reserved in Table 2 will read as
$00 for forward compatibility with future versions of RMI.
Several RMI queries report version numbers of various aspects of an RMI product. Register $0200 reports
the version number of the RMI protocol itself; other registers report the version of the product or of a
particular function. In general, reporting version number x.y for an aspect of RMI means that the device
conforms to version x.y of the specification for that aspect. The various aspects’ version numbers might
change independently; for example, for some reason a device might implement a newer version of
Function $10 but an older version of the physical interface, or vice versa.
RMI version numbers generally consist of two unsigned integers, major and minor. Minor, mostly
compatible changes would generally be expressed by increasing the minor version by one, holding the
major version the same. Major or significantly incompatible changes would generally be expressed by
increasing the major version by one and changing the minor version back to 0 or 1.
The major version can be 0 to indicate a “preliminary” version of the aspect being described (the minor
version then identifies which of several preliminary drafts pertains). The minor version can be 0 to
indicate a “preliminary” version of a specific major version (with no way to distinguish among drafts).
If major and minor are both non-zero, the version represents a final shipping specification. The version
number 0.0 is never used. (Note that, while register $xx00 will probably report $00 if $xx is a not-present
function number, register $xx00 is in this case an unimplemented register, not a true Function Version
query register.)
RMI diagnostic tools will display version numbers as “[Link]” where major and minor are each
decimal integers from 0 to 15.
$0201 Manufacturer ID
7 6 5 4 3 2 1 0
The version of each physical layer is included in the specification document for the physical layer.
Section 4 describes the standard RMI-on-I2C, RMI-on-SMBus, and RMI-on-SPI physical layers.
$0203 Reserved for future product property bits Can Doze Reserved
Each property bit is ‘1’ if the product has the associated property, or ‘0’ if the product does not have the
associated property. Reserved property bits report as ‘0’, but they may report as ‘1’ in devices that
comply with a future version of RMI.
Each byte is an unsigned integer in the range from 0 to 255. The contents of these registers are product
specific and are specified when the product is ordered.
7 6 5 4 3 2 1 0
If the month code is $E or $F, the date code is formatted in a different way that is also
recognized by RMI diagnostic tools. In this format, bits 5:0 of register $0209 encode a
week number within the year. The remaining possible month code $D is reserved for future
definition by RMI.
If the Serial Number query (registers $020C–$020D) is not $0000, then the combination of
Manufacturer ID, Product ID, Date Code, Tester ID, and Serial Number should be
completely unique among all manufactured RMI devices. (Nothing in the RMI standard
itself uses the serialization information, but hosts and tools may rely on this uniqueness
property when the Serial Number is non-zero.)
These registers form a null-terminated string that identifies the product. If the string is of length N
characters, then registers $0210 through $0210 + N – 1, inclusive, encode printable ASCII characters in
the range from $20 to $7E, and registers $0210 + N through $021F, inclusive, are $00.
The form of the Product ID string depends on the product manufacturer. The exact Product ID format for
Synaptics products will vary from one product family to another. For custom touch sensing modules, the
Product ID currently is of the form, for example, “TM605” or “TM605-2”, but this format is subject to
change in the future.
Note: RMI informally reserves the address range $0380–$03FF in case a future extension of RMI
doubles the range of function numbers.
The Function Presence query register for each present function is formatted as follows:
7 6 5 4 3 2 1 0
Figure 15. Function Presence Query register (if Function $xx is present)
If Num Data Sources is zero, then the function must necessarily have no data registers, and
bits 3:0 of the query instead report $F. If the number of data sources or the number of data
registers is too large to be represented in this format, bits 6:4 instead report zero and bits
3:0 report $E. Note that bits 6:0 of the Function Presence Query are guaranteed to be not-
all-zero for any present function.
RMI devices must return $00 when the host reads any address in the $0310–$037F range corresponding
to a function that is not present in the device.
Diagnostic tools, and multi-purpose host drivers, can use the defined properties of the Function Presence
Query registers to enumerate all the functions present on an unknown device, and to correctly interpret
the bits of the Device Status register and the data registers of page $04xx even if they do not recognize
some of the included functions. (Note that if any Function Presence query reports $0E in bits 6:0,
diagnostic tools will not be able to interpret the device’s data without recourse to outside information
about the device.)
However, a function can set the Standard Function Page Layout bit (bit 7) of its Function Presence query
(see section 2.7.8) to indicate that it follows certain conventions about the layout of its register page.
Diagnostic tools and platform drivers may be able to use this fact to provide a basic interface to functions
they do not recognize.
If the Standard Function Page Layout bit is ‘1’ for Function $xx, then registers $xx00–$xxFF generally
follow the conventions shown in Table 3.
If the Standard Function Page Layout bit is ‘0’ for Function $xx, or if Function $xx is not present, then
tools should not assume anything about the contents, purpose, or behavior of registers $xx00–$xxFF.
The Num Data Sources field of register $0310 expresses how many distinct 2-D sensors are present in the
device. When Function $10 is present with 1, 2, or 3 2-D sensors, its Num Data Sources value will be 2,
4, or 6, respectively. If Function $10 has more than three 2-D sensors, its register $0310 will be $8E,
indicating that the standard queries are unable to express the number of 2-D sensors (see section 2.7.8).
Tools that operate a device with more than three 2-D sensors must rely on information beyond the
device’s own queries to interpret the device.
For example, in a device with two 2-D sensors, source 0 is absolute position for 2-D sensor #0, source 1 is
relative motion for 2-D sensor #0, source 2 is absolute position for 2-D sensor #1, and source 3 is relative
motion for 2-D sensor #1.
When more than one 2-D sensor is present in the device, all the 2-D sensors operate independently. Each
2-D sensor reports its data in separate data registers with separate interrupt request and interrupt enable
bits. Each 2-D sensor’s properties are described by a separate set of queries, and each 2-D sensor is
configured by a separate set of control registers.
Register $1001 contains general information about the 2-D sensor function.
7 6 5 4 3 2 1 0
$1001 — — — — — — — —
Registers $1002–$1019 describe information about each of up to three 2-D sensors. For devices with
fewer than three 2-D sensors, the query registers corresponding to higher-numbered 2-D sensors are
unused and read as $00. For devices with more than three 2-D sensors, the higher-numbered sensors
might not be described by device queries.
The queries for a given 2-D sensor are shown in Figure 18:
7 6 5 4 3 2 1 0
$1002 — — — — — — — —
$1003 Has 2D Has Enhanced Has Multi Has Palm
— — Has Scroller —
Scrollers Gestures Finger Detect
$1004 — — — Sensor X Max Position (bits 12:8)
$1005 Sensor X Max Position (bits 7:0)
$1006 — — — Sensor Y Max Position (bits 12:8)
$1007 Sensor Y Max Position (bits 7:0)
$1008 Sensor Resolution
$1009 — — — — — — — —
Figure 18. Function $10 per-sensor query registers (addresses shown for sensor #0)
If the 2-D sensor has a separate (non-virtual) scroll strip associated with it, the designer of
the device may elect either to associate the strip with the 2-D sensor in the same way as a
virtual scrolling zone (above), or to treat the strip as a separate 1-D sensor. The former case
is more appropriate if the strip is to be used strictly as a relative scroller. The latter case
allows the host to obtain absolute position and Z data for the strip. In the latter case, the
2-D sensor’s Has Scroller bit will be ‘0’, and the 1-D sensor will be treated as an
independent Function $14 in the device.
Many RMI devices, such as custom-designed TouchPad modules, have sensors with a known physical
size and aspect ratio. On these devices, each 2-D pad has X Max Position, Y Max Position, and Sensor
Resolution queries that report the physical properties of the pad. These queries are computed as a function
of the Max Position control registers. If the host writes to the Max Position registers, it may take up to
two report periods (as defined in section 2.6.1) to recalculate the X Max Position, Y Max Position, and
Sensor Resolution queries; those query registers’ contents are untrustworthy for up to that much time after
any write to Max Position. The data registers for the pad are also untrustworthy for up to two report
periods after any change to Max Position.
If the pad has landscape orientation (in other words, it is wider than it is high, like a
traditional TouchPad mounted in a laptop computer), then X Max Position is the same as
Max Position, and Y Max Position is a smaller number depending on the aspect ratio of the
2-D pad. For a portrait-oriented pad (one that is mounted with the sensor higher than it is
wide), Y Max Position is the same as Max Position, and X Max Position is smaller. For a
perfectly square pad, both X Max Position and Y Max Position are equal to Max Position.
Thus, if X Width represents the known physical X-axis width of the sensor active area in millimeters, and
Y Height represents the physical Y-axis height in millimeters, then the queries are calculated as:
The X Width and Y Height values are not directly reported in Function $10 queries, but the host can
derive them from the other queries by solving the above equations, as follows:
If Sensor Resolution is on the order of 100 units per millimeter, then these formulas will yield width and
height values accurate to about 1%. The aspect ratio of the sensor is simply the ratio of X Width to
Y Height, or, equivalently, the ratio of X Max Position to Y Max Position.
In other RMI devices, such as Synaptics OneTouch™ products, the device firmware does not know the
physical size and aspect ratio of the sensor. In such devices, the X Max Position, Y Max Position, and
Sensor Resolution query registers are unimplemented and all reset to $00 for each 2-D pad on the device.
For purposes of the definitions below, the X Max Position and Y Max Position of such a device are both
equal to the Max Position control register value.
$1041 Reduced
— — No Filter — No Clip Z No Decel —
Reporting
$1042 Reserved
$1043 Reserved
Register $1041 resets to $00, and can be left at its reset setting in most applications. Its bits are defined as
follows:
• If the finger count changes and the sensor status does not indicate a transitional finger
(it is not equal to '111') or
• if the gesture bit changes.
For RMI devices that do not support multiple fingers, setting this control bit means that
ATTN will be asserted once when a finger lands (sensor status changes from '000' to '001'),
and once again when the finger leaves (sensor status changes from '001' to '000'). For RMI
devices that sense multiple fingers, ATTN will be asserted each time an additional finger
lands, and each time that any finger leaves. If a user were to tap the sensor, the ATTN
interrupt would be asserted whenever the gesture bit changed state. See Section 2.5.4 for
more information about attention signals.
If this bit is set to ‘1’, then capacitance readings too small to qualify as a finger may still
report a non-zero Z. Depending on the physical design of the sensor, this mode may allow
a limited form of proximity detection. However, it will cause the sensor to report interrupt
requests occasionally when no real finger is near, which may interfere with power
management in the host system.
Registers $1044–$104F control the operation of up to three 2-D sensors. For devices with more than
three 2-D sensors, the higher-numbered 2-D sensors are configured in a device-dependent way. For
devices with fewer than three 2-D sensors, the higher-numbered control registers in this range are
unimplemented and reset to $00.
7 6 5 4 3 2 1 0
Figure 20. Function $10 per-sensor 2-D Control registers (addresses shown for sensor #0)
Setting the Minimum Relative Distance to a non-zero value will affect the user’s ability to
make small controlled movements.
The actual reporting ranges are indicated by the X and Y Max Positions, described above
in section 3.1.3. The Max Position control register resets to a device-dependent default.
For devices with a known physical sensor size (such as custom modules), the default Max
Position is chosen if possible to cause the default Sensor Resolution to come to around
80 units per millimeter (around 2000 units per inch). For devices that do not know the
physical sensor size (such as Synaptics OneTouch products), the Max Position control
register generally defaults to $1FFF, the largest representable range.
After any change to the Max Position or Sensitivity Adjust registers for a pad, the data registers for the
pad should be considered untrustworthy for up to the next two report periods.
The host may choose to read a subset of the data source registers if it desires only one kind of data. The
host may also choose to set the interrupt enable bit for a subset of the potential data source interrupts if
it is only interested in being alerted to the corresponding type of finger activity.
For example, a host that plans to read the absolute data registers could set either the absolute or the
relative interrupt enable bit depending on whether it wishes to be interrupted continuously when the
finger is present, or only when the finger moves appreciably. A host that was only interested in knowing
where the finger was when a tap gesture was performed could enable just the gesture interrupt enable bit.
This would prevent a stream of interrupts from the absolute data source if a finger was touching the pad,
but not tapping.
The absolute data source for a 2-D sensor has six data registers, as shown in Figure 21.
7 6 5 4 3 2 1 0
Not all Synaptics 2-D pads implement finger width detection. For those that do not
implement finger width (for example, those that report Has Palm Detect = ‘0’ in the
queries), the Width field will report 0 regardless of the kind of finger contact.
Z (Register R+1)
This field reports the amount of finger contact or finger signal strength, which often serves
as a rough estimate of finger pressure. The calculation of Z is inherently approximate;
actual reported Z values will vary from one pad to another and from one user to another. In
fact, because capacitance is influenced by environmental effects such as the moisture of the
skin, Z measurements can even vary from day to day for the same device and user.
When Z = 0, the position cannot be measured and the X and Y Position registers are left
unchanged. By default Z is taken as 0 whenever the device’s built-in algorithms determine
that no finger is present. If the No Clip Z bit of register $1041 is set to ‘1’, then positive
but very small Z values will be reported when the device measures a faint capacitance
signal; in this case, the position will be reported but it may not be very accurate.
When no finger is present on the sensor, the X and Y Positions report the last known valid finger position.
R+0 X Delta
R+1 Y Delta
These data registers are applicable only for the first finger. These data registers are defined as follows:
The delta registers accumulate motion until the host reads the delta registers. The motion accumulators
report +127 or –128 if so much motion occurs between host reads that the registers overflow their 8-bit
signed range.
Note: The device may implement the relative motion accumulators as “sticky” 8-bit signed integers,
which hold at +127 or –128 once reaching either of those values until they are cleared by reading. Or, the
accumulators may be implemented as larger accumulators whose values are clipped to +127 or –128
when expressed in the data registers; in this case, they will not appear “sticky” if an overflowing motion
is countered by a reverse motion before the host reads the data registers.
Any read transaction that reads at least one register of the relative data source (those registers shown in
Figure 22) clears the X and Y Delta accumulators. Thus, reading relative data registers twice in rapid
succession is likely to return $00 deltas on the second read. Note that this means the X and Y deltas must
be read in a single multi-byte read transaction; if separate one-byte read transactions were used for these
two bytes, the second delta byte would be cleared to $00 before it was read.
The gesture data source for a 2-D sensor has two data registers, as shown below.
7 6 5 4 3 2 1 0
These data registers are applicable only for the first finger, and are defined as follows:
Y Magnitude and X Magnitude (Register R+1, bits 7:4 and 3:0), or Pinch Magnitude (bits 7:0)
These fields report the X and Y magnitudes of the current flick gesture or the Pinch
Magnitude of the current Pinch gesture, if there is one. These fields report values of $00
whenever there is no flick or Pinch gesture in effect. The values reported in these fields are
signed relative motion rather than an actual distance. As the names suggest the Y
Magnitude field indicates the component of the flick that was in the vertical direction,
while the X Magnitude field indicates the component of the flick that was in the horizontal
direction. The Pinch Magnitude is an 8-bit signed number which indicates the magnitude
of the Pinch In (negative values) or Pinch Out (positive values) gesture.
Both X and Y Magnitudes report values in the range –7..+7, which are described below:
• Flick
o –7 a fast flick along the negative X or Y axis.
o –1 a slow flick along the negative X or Y axis.
o +1 a slow flick along the positive X or Y axis.
o +7 a fast flick along the positive X or Y axis.
Pinch Magnitude reports values in the range –128..+127, which are described below:
• Pinch
o –128 pinching out very quickly.
o –1 pinching out very slowly.
o +1 pinching in very slowly.
o +127 pinching in very quickly.
The host may make its own interpretation of the meaning of pinch out and pinch in to suit its
particular needs. Some possible meanings might be:
o Pinch out = increase the volume.
o Pinch in = decrease the volume.
Or:
o Pinch in = make the image smaller.
o Pinch out = make the image larger.
The relative data source of a 2-D sensor asserts an interrupt request on every report period that adds a
non-zero amount of motion to the X Delta and/or Y Delta motion accumulators. Note that because
interrupt request bits are sticky, an interrupt request will remain at ‘1’ even if a later backward finger
motion subtracts the deltas down to zero again by the time the host reads the deltas; therefore, the host
should be prepared occasionally to see ($00, $00) deltas even when an interrupt request is reported.
Conversely, some finger motions might not generate X and Y Deltas in some products; for example,
finger motion in a virtual scroll zone will generate deltas on the associated scroller instead of on the 2-D
pad’s relative data source.
The Num Data Sources field of register $0313 expresses how many distinct scrollers are present in the
device. If Function $13 has more than seven scrollers, its register $0313 will be $8E, indicating that the
standard queries are unable to express the number of scrollers (see section 2.7.8). Tools that operate a
device with more than seven scrollers must rely on information beyond the device’s own queries to
interpret the device.
$1301 — — — — — — — —
Registers $1302 through $1309 contain specific information about up to eight scrollers. Register
$1302 + N describes scroller #N. If the device has fewer than eight scrollers, the higher-numbered queries
in this group are reserved. If the device has more than eight scrollers, the higher-numbered scrollers might
not be described by queries.
7 6 5 4 3 2 1 0
$1302 — — — — — — — —
Figure 25. Function $13 per-scroller query registers (address shown for scroller #0)
In the present version of Function $13, all bits of this query are reserved.
This register resets to $03, and can be left at $03 in most applications. These bits are defined as follows:
Function $13 also uses the standard RMI interrupt enable control bits (see section 2.6.2) in a special way.
For scrollers that report a virtual scrolling zone on a 2-D pad, the interrupt enable bit for the scroller
enables the scroll zone itself: If interrupt enable is ‘0’ for the scroller, then the entire 2-D pad area is used
for relative motion sensing, but if interrupt enable is ‘1’ for the scroller, then certain finger motions within
a designated zone on the 2-D pad generate scrolling deltas instead of relative motion deltas.
Some scrollers, such as up/down buttons, will always report incremental motion; others,
such basic scroll strips, will always report continuous motion. Other scrollers may generate
both kinds of motions in response to different inputs; for example, a scroll strip that
enables tapping gestures or EdgeMotion to scroll by increments.
Some scrollers, such as linear scroll strips, will report always horizontal scrolling or always
vertical scrolling. Others, such as 2-D pads with right- and bottom-edge virtual scroll
zones, are able to report scrolling in either direction in response to different inputs.
The scale of the scroll delta for incremental scrolling (such as a tap, a tap-and-hold, or one
detent of a wheel) is product-dependent. The scale of the scroll delta for continuous
scrolling also depends on the particular device.
The scroll delta register accumulates motion until the host reads the scroller data register. The scrolling
accumulator reports +31 or –32 if so much scrolling occurs between host reads that the register overflows
its 6-bit signed range. The device may implement the scroll delta as being backed by a larger accumulator
with a wider range, whose value is clipped to –32 to +31 range for reporting in the data register.
Any read transaction that reads the scroller data register clears the scroller’s delta accumulator. Thus,
reading the scroll data register twice in rapid succession is likely to return a $00 delta on the second read.
Each 1-D sensor has two data sources. The first data source reports the absolute finger position, and the
second data source reports the relative finger motion.
The Num Data Sources field of register $0314 expresses how many distinct 1-D sensors are present in the
device. When Function $14 is present with 1, 2, or 3 1-D sensors, its Num Data Sources value will be 2,
4, or 6, respectively. If Function $14 has more than three 1-D sensors, its register $0314 will be $8E,
indicating that the standard queries are unable to express the number of 1-D sensors (see section 2.7.8).
Tools that operate a device with more than three 1-D sensors must rely on information beyond the
device’s own queries to interpret the device.
For example, in a device with two 1-D sensors, source 0 is absolute position for 1-D sensor #0, source 1 is
relative motion for 1-D sensor #0, source 2 is absolute position for 1-D sensor #1, and source 3 is relative
motion for 1-D sensor #1.
When more than one 1-D sensor is present in the device, all the 1-D sensors operate independently. Each
1-D sensor reports its data in separate data registers with separate interrupt request and interrupt enable
bits. Each 1-D sensor’s properties are described by a separate set of queries, and each 1-D sensor is
configured by a separate set of control registers.
Register $1401 contains general information about the 1-D sensor function.
7 6 5 4 3 2 1 0
Registers $1402–$1409 describe information about each of up to four 1-D sensors. For devices with fewer
than four 1-D sensors, the query registers corresponding to higher-numbered 1-D sensors are unused and
read as $00. For devices with more than four 1-D sensors, the higher-numbered sensors might not be
described by device queries.
The queries for a given 1-D sensor are shown in Figure 30:
7 6 5 4 3 2 1 0
$1402 — — Info Location Info Loop Info Orient Has Multi Fing Has Palm Det —
$1403 Sensor Resolution
Figure 30. Function $14 per-sensor query register (addresses shown for sensor #0)
The Has Multi Finger and Has Palm Detect bits are defined in the same way as for Function $10, and the
Sensor Resolution is computed from Max Position in a way analogous to Function $10. As in Function
$10, the Sensor Resolution is $00 for devices with unknown physical dimensions.
Register $1441 resets to $00, and can be left at $00 in most applications. Its bits are defined in the same
way as those of Function $10 register $1041. Note that if a device contains both 2-D pads and 1-D strips,
all the pads on the device are controlled together by register $1041, and all the strips on the device are
controlled together by register $1441.
Registers $1444–$1453 control the operation of up to four 1-D sensors. For devices with more than four
1-D sensors, the higher-numbered 1-D sensors are configured in a device-dependent way. For devices
with fewer than four 1-D sensors, the higher-numbered control registers in this range are unimplemented
and reset to $00.
7 6 5 4 3 2 1 0
Figure 32. Function $14 per-sensor 1-D Control registers (addresses shown for sensor #0)
The Sensitivity Adjust and Max Position registers are defined analogously to the per-sensor control
registers of Function $10.
The absolute data source for a 1-D sensor has four data registers, as shown in Figure 33.
7 6 5 4 3 2 1 0
The Width, Gesture, Sensor Status, Z, and Position fields are defined analogously to the corresponding
data fields of the Function $10 absolute data source.
For strip sensors, the Position is equal to $0000 or Max Position when the finger is past the limits of the
sensor area; not all strips will be able to sense these positions. The Position is between $0001 and (Max
Position – 1) when the finger is touching the strip. The position $0000 corresponds to the leftmost or
bottommost end of the strip if the device is a product to be mounted in a known orientation. For products
(such as Synaptics OneTouch) whose orientation is not known by the device firmware, Position $0000
corresponds to the lowest-numbered sensor electrode.
For closed-loop sensors, the Position is equal to $0000 when the finger is at the twelve o’clock position
on the loop (for products with a known orientation) or when the finger is over the lowest-numbered
sensor electrode (for products with unknown orientation). The Position values range from $0000 to Max
Position, inclusive, where the position values $0001 and Max Position are immediately adjacent to
position $0000. The Position values increase from $0000 with motion in a clockwise direction (for
products with a known sensor electrode layout) or toward higher-numbered sensor electrodes (for
products with unknown layout).
The relative data source for a 1-D sensor has one data register, as shown in Figure 34.
7 6 5 4 3 2 1 0
R+0 Delta
The 1-D sensor Delta is defined analogously to the corresponding data field of the Function $10 relative
data source. A positive Delta represents increasing Position values as defined above. Any read transaction
that reads the relative data source register shown in Figure 34 clears the Delta accumulator. Thus, reading
the relative data register twice in rapid succession is likely to return a $00 delta on the second read.
Regardless of the number of capacitive buttons, Function $18 always has exactly one data source that
reports the states of all the buttons. However, the number of data registers in the data source varies
depending on the number of buttons, as described below.
The Number of Capacitive Buttons field is an integer from 1 to 255 reporting the number of capacitive
buttons present.
These registers each reset to $00, and can be left at $00 in most applications. Their bits are defined as follows:
Notes: The majority of button products should never require enabling this feature. For
systems that may produce excessive amounts of electrical noise, enabling this feature may
help distinguish button events from electrical noise. Enabling the Heavy Filtering feature
will modestly impact the responsiveness of the capacitive buttons. This impact may affect
the speed at which button presses are registered, the speed at which button releases are
registered, and/or the ability to catch fast taps on the buttons.
However, some devices with more than one capacitive button may use button
usage settings ‘01’, ‘10’, and ‘11’ as a cue to reject or recalibrate to capacitance
measurements that affect all buttons at once. This cue may help reduce the
buttons’ sensitivity to hover, accidental palm contact, and environmental
changes such as temperature drift.
When button usage is ‘01’, ‘10’, or ‘11’, the capacitive button data registers
may report unpredictable data if all buttons are touched simultaneously. Also, if
this simultaneous touch is more than brief, then the button data may remain
unpredictable for as long as any buttons remain touched thereafter. However,
every Function $18 implementation must be able to recover quickly and resume
correct operation once all fingers have been removed from the buttons.
Button usages ‘10’ and ‘11’ are advisory in the sense that some devices might
not fully implement the “strongest button” or “first button” rules. In such
devices, button usages ‘10’ and ‘11’ may be treated the same. However, all
Function $18 devices must ensure that no more than one button data bit is
reported as ‘1’ at the same time whenever the Button Usage field is set to ‘10’
or ‘11’.
For devices with only one capacitive button, the Button Usage field is effectively ignored.
Buttons 7–0 are reported in bits 7:0 of the first capacitive button data register. Buttons 15–8 are reported
in bits 7:0 of the second data register, buttons 23–16 are reported in the third data register, and so on. In
general, button N is reported in bit (N mod 8) of data register number int(N / 8).
Each bit in the capacitive button data registers is ‘1’ if the button is being touched, or ‘0’ if the button is
not being touched.
The data registers of a capacitive button sensor are shown in Figure 38, with the example of 18 buttons.
7 6 5 4 3 2 1 0
Figure 38. Function $18 data registers for capacitive buttons (for example of 18 buttons)
Note that if a device includes both mechanical and capacitive buttons, these are treated in RMI as two
separate Functions with two separate data sources and data registers.
• In the non-integrated model of GPIOs, the GPIs and GPOs are treated as completely separate
facilities. A device may have only GPIs, or only GPOs, or some of each type. GPI #N is usually a
different, unrelated chip pin to GPO #N, and if a pin is both a GPI and a GPO, its GPI number
and GPO number need not be the same. The non-integrated model is well-suited to special-
purpose custom modules that want to have straightforwardly numbered mechanical button inputs
as well as straightforwardly numbered LED outputs.
Note: The non-integrated model, as defined, is flexible enough to encompass practically any
combination of GPI, GPO, and GPIO functionality. In practice, care should be taken when
specifying an RMI device to avoid confusing choices. For example, if a certain pin is both a GPI
and a GPO, it is best to assign it equal GPI number and GPO number even though this is not
strictly required. Some GPIO combinations may not be supported in a given product line; for
example, current Synaptics firmware supports only the integrated model and a “strict” non-
integrated model in which each pin is either a GPI or a GPO, never both.
• In the integrated model of GPIOs, the GPIs and GPOs are simply the input and output functions
of the same set of pins. GPI #N reports the input voltage sampled on pin #N, and GPO #N
controls the output voltage driven onto the same pin #N. The integrated model is well-suited to
general-purpose products that can benefit from maximum flexibility.
A device might contain only GPIs, in which case the number of GPOs is zero. A device might also have
only GPOs, in which case the number of GPIs is zero. (Function $20 itself would be present only if at
least one GPI or GPO exists.)
If there are no GPIs, then Function $20 has no data sources. If there are one or more GPIs, Function $20
has exactly one data source that reports the states of all the GPIs. The number of data registers in the data
source varies depending on the number of GPIs, as described below.
Registers $2001–$2003 report the number of GPIOs on the device, and their overall properties.
7 6 5 4 3 2 1 0
$2041 — — — Debounce — — — —
This register resets to $00, and can be left at $00 in most applications. In the present version of Function
$20, this register contains only a Debounce bit:
Registers $2042 onward each control the output modes of a group of eight consecutive GPOs. The
number of control registers depends on the number of GPOs. Each group of eight GPOs is controlled by a
pair of consecutive control registers. In general, if there are N GPOs, then there are 2 * int((N+7) / 8)
GPO control registers. If a device has no GPOs (but Function $20 is still present because there are GPIs),
then there are no GPO control registers at all.
Figure 42. Function $20 GPO Output Control registers (for example of 19 GPOs)
The DataN and DirectionN bits together control the state of GPO #N, as follows:
DirectionN DataN State of GPIO #N
0 0 Input mode, high-impedance
0 1 Input mode, with weak pull-up resistor
1 0 Output mode, driving digital ‘0’
1 1 Output mode, driving digital ‘1’
Table 10. GPO control settings (integrated-model conventions)
The GPO Data and Direction control registers may be written individually or in pairs or groups. However,
if a single RMI write transaction covers both the Data and Direction registers for a given GPO #N, then
the two parts of the control state of GPO #N will be updated coherently: Register writes may change the
DataN and DirectionN bits from any one to any other of the four states in Table 10 without creating a
glitch on the pin.
Depending on the device implementation, writing to a GPO control register may have an immediate effect
on the controlled GPOs, or the effect may be delayed until the next internal reporting period, typically a
few milliseconds.
The reset states of the GPO control registers are up to the device; in many products, they will reset to non-
$00 values.
Chip pins that are GPIs but not GPOs are not controllable through the RMI interface. They typically are
either permanently in high-impedance mode, or permanently in weak pull-up mode, depending on the
design of the particular device.
GPIs 7–0 are reported in bits 7:0 of the first GPI data register. GPIs 15–8 are reported in bits 7:0 of the
second data register, GPIs 23–16 are reported in the third data register, and so on. In general, GPI number
N is reported in bit (N mod 8) of data register number int(N / 8).
A device may define its GPIs to have either positive or negative polarity. Positive polarity means each
GPI data bit follows the digital level on the associated pin, either ‘1’ for a high voltage or ‘0’ for a low
voltage. Positive polarity is most appropriate for general-purpose I/Os. Negative polarity means each GPI
data bit follows the complement of the digital level on the associated pin. Negative polarity is most
appropriate for input pins connected to mechanical buttons with pull-up resistors.
The GPI data registers are shown in Figure 43, with the example of 19 GPIs.
7 6 5 4 3 2 1 0
Figure 43. Function $20 data registers for GPIs (for example of 19 GPIs)
Note that if a device includes both mechanical and capacitive buttons, these are treated in RMI as two
separate Functions with two separate data sources and data registers.
Chip pins that are GPOs but not GPIs do not have their states reported through the RMI interface, even if
they are set in high-impedance mode.
Depending on the device, chip pins that control Function $22 LEDs may or may not also be accessible as
Function $20 GPIOs. A general-purpose device such as Synaptics OneTouch™ might allow the same pin
to be controlled via either function; a custom product would typically implement each pin as either an
LED, a GPI, or a GPO depending on the pin’s intended purpose.
Registers $2242 and $2243 reset to $00. The host should write registers $2242 and $2243 to set the
device in the desired state of each LED.
Writing the LED Enable N bit to ‘0’ sets LED #N to the Disabled state. The LED will turn
off either immediately or over a specified period of time. In RMI Function $22, the “off”
state is always represented by zero sink current on the LED pin.
Registers $2244–$2245 control the speed of the ramps and animations of the LEDs.
7 6 5 4 3 2 1 0
These registers reset to $00. The fields of these registers are defined as follows:
Each LED also has one register that controls the LED specifically. The register for LED #N is at address
$2250 + N:
7 6 5 4 3 2 1 0
Figure 48. Function $22 per-LED Control register (address for LED #0 shown)
The ramp begins immediately after the write to the LED Enable control
registers or the Per-LED Control register, and may be unsynchronized (out of
phase) with other ongoing ramps or animations. To ramp several LEDs
synchronously, write all the LED Enable bits at once in the same RMI write
transaction.
When the LED is disabled, the LED switches immediately to the “off” state.
When the LED is disabled, the LED switches immediately to “off” state.
Function $22 interacts with the power management features described in section 2.6.1. The device will be
unable to doze if any ramping or animation is ongoing. Also, for devices that use pulse width modulation
(PWM) to control LED brightness, the device will not doze if any LED is resting at an intensity other
than “off” or fully on (Brightness = $1F). Devices that use adjustable current to control LED brightness
will be able to doze when LEDs rest at intermediate intensities, but the dozing power usage of the device
may be considerably higher when any LED is at any intensity other than “off.”
1. Read one or more RMI registers starting from some RMI register address.
2. Write one or more RMI registers starting from some RMI register address.
The I2C bus specification imposes no limit to the number of registers that the host can read in a single
transfer. However, RMI does not permit a physical layer transfer to cross a page boundary, so the
practical limit on the maximum length of a transfer would be the number of registers in an RMI address
page, or 256.
The I2C bus specification imposes no limit on how long a transfer can take, or how slowly a bus master is
allowed to clock the bus. To meet this specification, RMI devices will not impose any timeouts during
any I2C transfer.
To make most efficient use of the I2C paged addressing scheme, Synaptics RMI-on-I2C devices define
that for all commonly used RMI device registers, there will be a duplicate aliased register located at a
new RMI address. The entire set of aliased register addresses are grouped into a single page of the RMI
address space. This enables user software to access all commonly used RMI registers without ever having
to rewrite the Page Select register.
The aliased addresses occupy page $04xx in the general RMI address map. At reset, all RMI-on-I2C
devices initialize their Page Select register to the value $04. This means that by default, all I2C register
accesses will access the RMI aliased address space.
For example: After a device reset, the Page Select register is defined to default to page address $04. If the
host sends an RMI-on-I2C device a Read Byte command to write address $F0, the device will access page
$04 at offset $F0, or address $04F0. From the table below, it can be seen that the aliased address $04F0
corresponds to the unaliased address $0000, or the RMI Device Control register.
Note: The exact Aliased Address Space address assignments are product-dependent. All products are
shipped with documentation that describes their specific address map. See section 4.4 for a
sample Product Address Map.
Below is an example of a Block Read operation, where the host reads 1 RMI register from address N:
Below is an example of a Block Read operation where the host reads 4 consecutive RMI registers starting
from address N:
Register A Register N P
N+2 N+3
It is not permitted to perform an I2C read operation that is not preceded by an I2C write of the low-order 8
bits of the RMI register address.
Below is an example of a Block Write operation where the host writes data to a single RMI register at
address N:
Below is an example of a Block Write operation where the host writes 3 consecutive RMI registers
starting with the register at address N:
• Synaptics modules correctly recognize and respond to Start events, Repeated Start events, and
Stop events.
Synaptics modules can co-exist on the same I2C bus with other devices that support the 10-bit extended
addressing mode. In addition, while Synaptics Slave-Only modules have 7-bit addresses, they can
respond as slave device to a host/master that has a 10-bit address.
This leads to a few system implications if the I2C bus VDD does not match the Synaptics ASIC VDD:
• The I2C bus VDD must be no greater than the Synaptics ASIC VDD.
• The host system must supply the pullup resistors from SDA and SCL to the I2C bus VDD.
Synaptics RMI-on-SMBus devices are suitable for connecting directly to an industry-standard SMBus
host interface. The SMBus transaction protocols supported by the Synaptics RMI-on-SMBus interface are
defined in section 4.2.3.
To make most efficient use of the SMBus paged addressing scheme, Synaptics RMI-on-SMBus devices
define that for all commonly used RMI device registers, there will be a duplicate aliased register located
at a new RMI address. The entire set of aliased register addresses are grouped into a single page of the
RMI address space. This will enable user software to access all commonly used RMI registers without
ever having to rewrite the Page Select register.
The aliased addresses occupy page $04xx in the general RMI address map. At reset, all RMI-on-SMBus
devices initialize their Page Select register to the value $04. This means that by default, all SMBus
register accesses will access the RMI aliased address space.
For example: After a device reset, the Page Select register is defined to default to page address $04. If the
host sends an RMI-on-SMBus device a Read Byte command to write address $F0, the device will access
page $04 at offset $F0, or address $04F0. From the table below, it can be seen that the aliased address
$04F0 corresponds to the unaliased address $0000, or the RMI Device Control register. The aliased
address space takes the following general form:
Aliased Address General RMI Register Groups
Address
$0400 - $041F $0400 - $041F RMI Data Registers and Device Status register (actual
addresses are product dependent). See section 2.5.3 for a
description of the Device Status register.
$0420 - $043F $xx40 - $xx5F Command/Control/Status registers for the first RMI
function.
$0440 - $045F $xx40 - $xx5F Command/Control/Status registers for a second RMI
function.
$0460 - $047F $xx40 - $xx5F Command/Control/Status registers for a third RMI function.
$0480 - $049F $xx40 - $xx5F Command/Control/Status registers for a fourth RMI
function.
$04E0 - $04E7 $0200 - $0207 RMI Product ID queries
$04F0 - $04F4 $0000 - $0004 RMI Control, Command, and General Status registers
$04FF $xxFF Page Select register (default value is $04)
Table 14. General RMI Aliased Address Map
Note: The exact aliased address space address assignments are product-dependent. All products are
shipped with documentation that describes their specific address map. See section 4.4 for a
sample Product Address Map.
The Page Select register is a control register that supplies the upper 7 bits of the 15-bit RMI address. The
default value of the Page Select register is $04. This means that by default, SMBus transfers will access
the aliased address space. Since all of the important RMI registers have been defined to exist on page
$04xx, typical SMBus hosts can treat RMI-on-SMBus devices as though they only have 8-bit addresses.
1. Read one or more RMI registers starting from some RMI register address.
2. Write one or more RMI registers starting from some RMI register address.
RMI-on-SMBus supports the standard SMBus transfer protocols to read and write bytes, and to read and
write words. Since all RMI registers are 8-bit registers, reading or writing a word really means to read or
write a pair of sequential RMI byte-wide registers. The following subsections describe the SMBus read
and write commands, using the notation found in the System Management Bus (SMBus) Specification,
Version 2.0 of August 3, 2000.
• The Command Code is the address of the first RMI register to be written.
• The Command Code is the address of the first RMI register to be read.
• Data Byte 0 is the contents of the register at the RMI Command Code address.
• Data Byte 1 is the contents of the register at the RMI Command Code address+1.
• All SMBus Read operations terminate with a NAK bit followed by a STOP bit.
Below is an example of a multi-register Read operation, where the host reads 4 consecutive RMI registers
starting from address N:
Register A Register N P
N+2 N+3
In similar fashion, if the host performs a standard Byte Write operation but simply keeps writing more
bytes, the RMI-on-SMBus device will write the extra bytes to subsequent register addresses.
Below is an example of a multi-register Write operation, where the host writes 3 consecutive RMI
registers starting with register address N:
SMBus is described in terms of layers. Synaptics SMBus compliance issues will be dealt with on a layer-
by-layer basis.
Note: Synaptics RMI-on-SMBus devices do not support the SMBus SMBALERT# signal. This means
that Synaptics SMBus devices will not respond to the SMBus Alert Response Address. Synaptics devices
support a general purpose Attention signal (ATTN) that can either be used as an interrupt input to a host
processor or as an input that the host can poll. As an order-time option, the ATTN signal can be
configured as being either active high or active low.
Synaptics RMI-on-SMBus slave devices can tolerate both random and periodic clock-stretching imposed
by any other device sharing the SMBus. Synaptics SMBus slave devices will stretch the clock for short
periods of time in random fashion, but they will never stretch the clock long enough to violate the 10 KHz
(min) bus transfer frequency.
Synaptics RMI-on-SMBus devices support the following four SMBus transfer protocols:
• Byte Read, Byte Write
• Word Read, Word Write
• Quick Command
• Send Byte, Receive Byte
• Process Call
• Block Write Process Call, Block Read Process Call
• Block Read, Block Write
Note: Synaptics SMBus devices do not support the ARP functionality to assign bus addresses. Synaptics
SMBus devices implement a fixed, 7-bit I2C addressing mechanism. The 7-bit I2C slave address for a given
Synaptics SMBus device will be fixed at the time that the product is ordered. It is the implementer’s
responsibility to choose a SMBus address that will not conflict with other SMBus devices in their system. If
desired, RMI-on-SMBus modules can be ordered with an address-strapping option. This allows a host
system to select a module’s I2C address among two or more preconfigured I2C addresses by strapping
module IO pins.
Note: Synaptics devices do not support the SMBus Packet Error Check (PEC) byte. Hosts should not
expect Synaptics devices to generate a PEC byte during read operations. Hosts should not send PEC bytes
to a Synaptics device during write operations.
• SSB, a device-select signal driven by the host. In some SPI systems this signal is known as Slave
Select, S̄S̄, or Chip Select, C̄S̄. SSB is an active-low signal that goes low when an RMI
transaction is in progress.
• SCK, a clock signal driven by the host. Several clocking conventions are supported, as described
in section 4.3.2.
• MOSI (master out / slave in), a data signal driven by the host.
• MISO (master in / slave out), a data signal driven by the RMI device. The device drives MISO
only when SSB is low; when SSB is high, the device floats its MISO pin. This allows multiple
RMI devices to be connected with SCK, MOSI, and MISO all tied in parallel, using separate SSB
wires to address the various devices.
• ATTN, an optional attention signal driven by the RMI device. This pin is not present on devices
that use the SRQ mechanism to signal attention (see section 4.3.5 below).
• RESET, an optional reset signal driven by the host. If a device provides a RESET pin, the pin is
an active-low input with a pull-up resistor on the RMI device. This allows RESET to be left
unconnected when not needed.
CPOL defines the idle level of SCK. CPOL is ‘0’ if SCK is low between transactions, or ‘1’ if SCK is
high between transactions. The usual clocking convention for RMI-on-SPI devices is CPOL = ‘1’; upon
request, Synaptics can also supply RMI devices that use the CPOL = ‘0’ clocking convention.
CPHA defines on which SCK edge the MOSI and MISO data are sampled by their respective receivers.
CPHA is ‘0’ to sample on the edge where SCK leaves its idle level (the falling edge if CPOL is ‘1’), or
CHPA is ‘1’ to sample on the edge where SCK returns to its idle level (the rising edge if CPOL is ‘1’).
Thus, all current RMI-on-SPI devices sample MOSI, and expect the host to sample MISO, on the trailing
SCK edge where SCK returns to its idle level.
RMI always transmits each byte most-significant-bit first, following the convention of most chips’ SPI
interfaces. (In other words, RMI follows the DORD = ‘0’ convention of AVR microcontrollers.)
RMI always changes both MISO and MOSI on the same clock edge, and it always samples both MISO
and MOSI on the same (opposite) clock edge. (In other words, RMI follows the SMP = ‘0’ convention of
PIC microcontrollers.)
During the first two bytes (16 SCK pulses) after the fall of SSB, the host transmits an address word on
MOSI, most significant byte first. In the address word, bit 15 is ‘1’ for a read transaction and ‘0’ for a
write transaction. Bits 14:0 hold the register address R. During the first byte of the address word, the
device transmits undefined data on MISO; then during the second byte of the address, the device
transmits the Device Status register.
For a read transaction, in subsequent bytes (groups of 8 SCK pulses), the device transmits on MISO the
contents of consecutive registers starting from the addressed register, and MOSI is ignored.
For a write transaction, in subsequent bytes, the host transmits on MOSI the write data for consecutive
registers starting from the addressed register, and the device transmits undefined data on MISO. During a
write transaction that writes several consecutive registers, the writing action to each register occurs as the
transfer of the data byte for the register completes (except for a very few multi-byte quantities that are
written only when the final byte is written, as described in section 2.1).
Note: This addressing mechanism is different from that of RMI-on-SMBus, but it is more consistent with
the types of mechanisms most often used on SPI devices.
The transaction ends when the host raises SSB. If the host raises SSB during or after either byte of the
address word, no transaction occurs. If the host raises SSB during a write transaction when only a fraction
of the 8 bits of a data byte have been transmitted, the register corresponding to that data byte is not
written (but any registers written earlier in the transaction will already be committed).
SSB
SCK
SSB
SCK
Note: The RMI protocol attempts to allow for RMI devices implemented on chips not made by
Synaptics. For example, a Synaptics module including both a touch sensing chip and another chip might
choose to use the other chip for host communication. Non-Synaptics chips implementing RMI devices
may impose a lower maximum clock rate such as 1 MHz.
The minimum SCK high and low times, TCH and TCL , are each half of the minimum overall SCK period.
RMI places no constraints on the maximum SCK high and low periods; the host may clock the device as
slowly and as irregularly as it wishes.
Other timing parameters of the SPI port are TBD. For RMI devices based on Synaptics chips, the input-
related parameters TSS, TSH, TDS, and TDH are expected to be no more than a few tens of nanoseconds, and
the output-related parameters TSO, TSZ, and TDO are expected to be no more than a few hundreds of
nanoseconds under reasonable loads.
To allow time for the device to process each byte received and to generate the next byte for transmission,
the host must provide a brief delay TDP between bytes during an SPI transaction. A delay between bytes
means a minimum time between the trailing SCK edge of the last bit of one byte and the leading SCK
edge of the first bit of the following byte. The host must delay for TDPRA ≥ 100 µs between the second
address byte and the first data byte in a read transaction, and it must delay for TDPWA ≥ 100µs between the
second address byte and the first data byte in a write transaction. The host must delay for TDPB ≥ 100 µs
between any other two bytes in a transaction. These are minimum delays; the host is free to delay longer
To allow time for the device to complete a transaction and prepare for the next transaction, the host must
also provide a brief delay TBT ≥ 100 µs between the rising edge of SSB that completes one transaction and
the falling edge of SSB that begins the next transaction.
Note: These delays were chosen to be sufficient for implementing RMI with a wide variety of features in
a wide variety of chips. The actual minimum required delays might be reduced for a specific device
implementation.
SSB
SCK
Synaptics can offer RMI devices using either of two additional attention mechanisms. One mechanism
uses a non-standard extension of the SPI interface called a “service request” (SRQ) bit. The other uses a
separate fifth ATTN pin to hold the attention signal.
Note: The option for a separate attention pin accommodates hosts that cannot handle interrupts and
MISO signals on the same host pin. It also may help in case RMI device interfaces must be implemented
in non-Synaptics chips that cannot generate an SRQ-like bit on MISO.
In the SRQ option, the RMI device drives the attention signal onto MISO as soon as SSB falls (see
Figure 49 and Figure 50).
The SRQ attention signal is “live” on MISO in the interval between the fall of SSB and the first SCK
edge: The host may lower SSB, leave SCK at its idle level, and watch MISO using an interrupt to wait for
an interrupt request report from the device. After the first SCK edge, it is undefined whether MISO
continues to follow the “live” attention state, or freezes at the state of the attention signal at the time of
the SCK edge.
The SRQ signal may be “live,” but its behavior is relatively simple: The only change to MISO that can
possibly occur during the SRQ period is one transition from the inactive to the active attention level,
because attention, once asserted, can be deasserted only by a host transaction that reads the data registers
or writes the Interrupt Enable bits. For RMI devices implemented using Synaptics’ SPI-compatible chips,
MISO will freeze after the first SCK edge.
Synaptics is also able to supply RMI devices that transmit the attention signal on a fifth ATTN pin. In this
option, ATTN can be ordered either as an active-high push-pull output pin, or as an active-low open-drain
pin for which the host must supply an external pull-up resistor. (The latter option allows multiple RMI
devices’ ATTN pins to be merged in a wired-OR configuration. Because MISO is a fully driven push-pull
output, the ATTN attention mechanism is better suited than SRQ to multi-device RMI systems.)
$00 $0400 Func18: Button Data 0 Button 7 Button 6 Button 5 Button 4 Button 3 Button 2 Button 1 Button 0
$21 $1841 Func18: Button Control Reg 0 — Button Usage Heavy Filter — — — —
$42 $2242 Func22: LED Enable Enable 7 Enable 6 Enable 5 Enable 4 Enable 3 Enable 2 Enable 1 Enable 0
$FF $xxFF Page Select Register — High 7 bits of 15-Bit RMI Page Address
Contact Us
To locate the Synaptics office nearest you, visit our website at [Link].
CORPORATE HEADQUARTERS
SYNAPTICS INCORPORATED
3120 SCOTT BLVD.
SANTA CLARA, CA 95054
USA
sales@[Link]