A method of communicating between first and second controllers (including between processes within the controllers, or microprocessors) on an i2C bus is provided. The i2C bus is of the type which transmits data packets that start with a start condition and end with a stop condition, and that includes a destination address followed by a transmission type, a first data byte, a second data byte, and one or more additional data bytes. The method includes the steps of: designating a destination address with a unique bus address (i.e., devAddress) of the second controller; designating the first data byte with a unique bus address (i.e., ownAddress) of the first controller; and specifying the transmission type, wherein the first and second controllers initiate a master-slave relationship for read and write operations between controllers. The invention also provides an i2C bus protocol system. The system includes an i2C bus with means for communicating an i2C packet across the bus. first and second controllers connect to the bus, with each controller having (a) means for specifying a devAddress as a slave address in the i2C packet, (b) means for specifying ownAddress as a master address in a first data byte of the i2C packet, and (c) means for specifying a tag within a subsequent data byte of the i2C packet, wherein the first and second controllers initiate a master-slave relationship for read and write operations along a conduit between processes within the controllers.
|
13. An i2C bus protocol system, comprising:
an i2C bus including means for communicating an i2C packet across the bus; first and second controllers connected to the bus, each controller having (a) means for specifying a devAddress as a slave address in the i2C packet, (b) means for specifying ownAddress as a master address in a first data byte of the i2C packet, and (c) means for specifying a tag within a subsequent data byte of the i2C packet, wherein the first and second controllers initiate a master-slave relationship for read and write operations along a conduit between processes within the controllers.
1. A method for communicating between first and second controllers on an i2C bus, the bus of the type which transmits data packets that start with a start condition and end with a stop condition, and that includes a destination address followed by a transmission type, a first data byte, a second data byte, and one or more additional data bytes, comprising the steps of:
designating the destination address with a unique bus address of the second controller; designating the first data byte with a unique bus address of the first controller; and specifying the transmission type, wherein the first and second controllers initiate a master-slave relationship for read and write operations between controllers.
2. A method of
3. A method of
4. A method of
5. A method of
6. A method of
7. A method of
8. A method of
9. A method of
10. A method of
11. A method of
12. A method of
14. A system of
15. A system of
|
The invention relates generally to a multi-processor bus protocol system utilizing I2C® bus architecture.
Several bus architectures are known, including the I2C® multi-master bus interface and architecture developed by Philips Semiconductors. I2C bus protocol is currently device-specific. For example, National Semiconductor manufacturers the LM75 digital temperature sensor, an integrated circuit which provides temperature, delta sigma A/D conversion, and over temperature detection. The LM75 interfaces to the I2C® bus; and any microprocessor on the I2C bus must utilize a unique protocol defined by National Semiconductor in order to access data from the LM75.
Each I2C bus manufacturer thus creates a unique protocol for its I2C devices. System manufacturers--which incorporate several I2C bus devices within a microprocessor controlled system--must understand and utilize all relevant protocols for proper system operation, adding cost to the system.
There is therefore a need to provide an I2C bus interface protocol which reduces the complexity and requirements of integrating I2C bus devices into a system. One object of the invention is thus to provide an I2C bus protocol system which alleviates the afore-mentioned difficulties.
At least one other significant limitation exists with the I2C bus interface. Currently, any microprocessor on the I2C bus can be a "master" when communicating to an I2C bus device. However, with a strict master-slave relationship, processes within a microprocessor on the I2C bus cannot communicate with other processes in other microprocessors. There is therefore a need to provide a system which permits communication between multiple microprocessors, and between separate processes within these microprocessors, on the I2C bus; and another object of the invention is to provide such a system.
A further object of the invention is to provide inter-processor communication on an I2C bus without interfering with fixed protocols established by existing I2C devices connected to the bus.
Other objects of the invention will be apparent from the description which follows.
In one aspect, the invention provides a method for communicating between first and second controllers (including between processes within the controllers, or microprocessors) on an I2C bus. This bus is of the type which transmits data packets that start with a start condition and end with a stop condition, and that includes a destination address followed by a transmission type, a first data byte, a second data byte, and one or more additional data bytes. The method includes the steps of: designating a destination address with a unique bus address (i.e., devAddress) of the second controller; designating the first data byte with a unique bus address (i.e., ownAddress) of the first controller; and specifying the transmission type, wherein the first and second controllers initiate a master-slave relationship for read and write operations between controllers.
In another aspect, the method includes the step of specifying the transmission type, by designating a busControl type, that defines whether the first controller operates as a slave or master. This step can include the further aspect of specifying (a) a master request to initiate the master request as soon as possible or (b) a slave request to initiate the slave request when the first controller specifies matching conduit information.
In another aspect, the method of the invention can include the step of specifying the transmission type by designating an ioRequest that defines whether the transmission is Read, Write, Read/Write or Write/Read.
In still another aspect, the method of the invention includes the step of designating a read by initiating a master-transmit, slave-receive protocol followed by a master-receive, slave-transmit protocol. In a similar aspect, the method can also include the step of designating a read/write by initiating a master-transmit, slave-receive protocol followed by a master-receive, slave-transmit protocol, followed by a master-transmit, slave-receive protocol.
The methods of the invention can also, include the step of designating the second data byte with a tag specifying a process address within the second controller, the tag and address of the first controller defining a conduit between a process in the first controller and a process in the second controller. The step of receiving data from the second controller can include, in another aspect, transmitting a repeated start condition, slave address and transfer direction after formation of the conduit.
In another aspect, the method can include the step of designating one process in the second controller with a reserved tag identifier, to accept conduit communication without a match to an existing request.
Another aspect of the invention includes the step of specifying a tag of zero, wherein the tag and unique address are not transmitted between the first and second controllers.
In yet another aspect, the invention includes the step of designating the bus address of the second controller as a predetermined number to connect with any master without a match to an existing request. Another aspect includes transmitting data from the first controller to the second controller prior to generation of the stop condition.
In accord with one aspect of the invention, the master can talk to an I2C device with standard I2C protocol by specifying a tag of zero. In this case, the ownAddress and tag are not transmitted nor are they expected to be received.
The invention also provides an I2C bus protocol system. The system includes an I2C bus with means for communicating an I2C packet across the bus. First and second controllers connect to the bus, with each controller having (a) means for specifying a devAddress as a slave address in the I2C packet, (b) means for specifying ownAddress as a master address in a first data byte of the I2C packet, and (c) means for specifying a tag within a subsequent data byte of the I2C packet, wherein the first and second controllers initiate a master-slave relationship for read and write operations along a conduit between processes within the controllers.
In another aspect, one or more I2C devices connect to the bus, with each controller having means for communicating with the I2C devices without interfering with communication between the controllers.
These and other aspects and advantages of the invention are evident in the description which follows and in the accompanying drawings.
Bus 11 consists of two bi-directional lines, a serial data line ("SDA") and a serial clock line ("SCL")
Each device 14 is software addressable by a unique address
Only one microprocessor master 12 controls data transfer on the bus 11 at any moment in time; and arbitration occurs at simultaneous data transfer requests on bus 11
Bus 11 interfaces are established by low level electronics supplied by Philips Semiconductor
Processes within microprocessor 12a cannot communicate with processes within microprocessor 12b, and vice versa
No stop bit is transmitted, so data communication from any device 14 or microprocessor 12 locks up bus 11, prohibiting other simultaneous communication on bus 11
Any device 14 or microprocessor 12 can become master of the bus 11 once bus 11 is available
Every byte on the SDA line is 8-bits long; data is transferred with most significant bit first
The tag designator illustrated by block 44 is described in more detail below and in connection with FIG. 3. Briefly, however, tag 44 represents a sub-address which provides lower level addressing within the receiving device. Accordingly, communication occurs not only between two devices, e.g., a microprocessor and an I2C device; but communications can also be addressed to a particular process within a microprocessor 22. In one preferred embodiment, if a driver is told that the TAG=0, then a special condition is implemented and the communication refers to raw I2C protocol (that is, the driver does not transmit tag and ownAddress, and neither is the tag and ownAddress expected in receive mode).
Data block 48 refers to data transferred to the device at ownAddress. Additional data blocks can be added to format 30 to provide for larger data transfers. Not acknowledgment (block 50) and a stop condition (block 52) follow completed data transfers.
Communications between processes generally occurs serially. For example, a communication between master 60, process 1, and slave 66, process 1 (i.e., designated by Tag 68) controls the bus during the communication. Once the communication is complete, for example, a communication between master 60, process 2, and slave 66, process 2 can commence. Note that process 1 of master 60 can also communicate with process 2 of master 66 using a Tag=70, for example.
Note that slave 66 can become the master after the bus 11 is free. In this case, "master" 66 can selectively communicate with processes 1 or 2 of "slave" 60 by specifying the tag designators 44 as Tag 62 or Tag 64, respectively.
In the preferred embodiment of the invention, tag designators are generally a number between 1 and 255, with 255 being the default or arbitrary condition. The master 60 does not specify a number 255, although any slave 66 can. As such, the 255 tag operates similar to a data filter: if a write condition is slated for a particular slave and process tag--and yet that slave does not have a corresponding tag designator--then the slave can accept the write condition as a tag 255.
The I2C bus 11 connects to each microprocessor 60, 66 through device drivers 11a, 11b (i.e., the electronic device drivers known in the art that comply with the Philips Semiconductor I2C specification). These drivers 11a, 11b encode and transmit conditions and data on the bus 11 with commanded formats such as format 30, FIG. 2A. The devices 11a, 11b further provide arbitration for use on the bus and priority sequencing, as described in more detail below.
The method described in connection with
As described above, the invention also provides source and destination addressing. The source address provides information to the device addressed in the destination address, --specifically the identity of the source of the message. The number of devices using the protocol is dependent on the number of I2C addresses already in use. I2C reserves addresses 0x00-0x07 and 0x7c-0x7F for 7-bit addressing, leaving 0x08-0x7B available for 116 I2C devices.
The invention also provides for "interlocking the conduit" until a response is generated. Prior to the invention, an interlock on the I2C bus occurs with master-transmit/slave-receive or master-receive/slave-transmit operations, locking out all communications to all devices on the bus until the bus is released. With the protocol of the invention, interlock only exists during a short period while software prepares a response, allowing several back-and-forth responses that may be interleaved with other communications using the same protocol.
The protocol of the invention uses two applications (referenced as processes above) to establish a communication. Both applications specify their own I2C address, the address of the opposite device, a tag, and the type of transmission. The controlling device (i.e., the master) sends the address of the opposite device (i.e., the slave) and the Input/output request type (read or write) as the first byte. This byte transfer is an I2C specification standard. The address and tag together form the conduit. In the case of the master, the devAddress and tag form the conduit. In the case of the slave,the ownAddress and tag form the conduit. It follows that the devAddress/tag and ownAddress/tag will match up the two requests.
Transmission types are separated into a busControl and an ioRequest. The busControl specifies whether the device is to operate as a master or a slave. The ioRequest specifies whether the transmission is a Read, Write, Read/Write or a Write/Read.
Packets
Messages are transmitted in a packet such as shown in FIG. 2A. The packet begins as a standard I2C data transfer, continues as specified herein, and finishes as a standard I2C data transfer. The packet of the preferred embodiment includes the following:
slave address: the first byte is the slave address (devAddress) in the high order 7 bits and a direction bit of 0 in the low-order bit.
1st byte: the first byte is the master address (ownAddress) in the low order 7 bits with the high order bit reserved (in standard I2C, this is the first data byte).
2nd byte: the second byte is the tag, which combined with the 1st byte selects the conduit.
Repeated Start: the presence of this byte depends on the ioRequest
Data bytes: the application data from the master or slave.
Stop Condition: this ends the transmission.
The invention provides for two transmission scenarios: (1) the master transmits data to the slave device; or (2) the master receives data from the slave. Prior to the invention, if a slave wishes to transmit, it is up to the master to initiate a master-receive/slave-transmit operation because the master controls the clock and is responsible for initiating all transmissions. In the protocol of the invention, the tag and the master address are first transmitted so that the conduit is established. Because of this, our protocol uses the I2C master-transmit/slave-receive followed by a master-receive/slave-transmit for case (2), thereby transmitting the conduit information first and then receiving the result while the bus is interlocked. In case (1), after the last application data byte is transmitted, the Stop Condition is generated by the master and the bus is released. The Repeated Start is therefore not used. In case (2), after two bytes of conduit information are transmitted, a Repeated Start Condition, the slave Address and Transfer Direction bit (Read) is transmitted, which turns the line around. The response from the slave contains the application data. The master, upon completion of the data transfer, generates the Stop Condition; and there are no extra bytes (i.e. conduit information) appended to the response.
Requests
There are two types of requests provided for by the invention, immediate requests and queued requests. Immediate requests begin as soon as the bus becomes free (e.g., a master request is an immediate request). Queued requests begin when an immediate request makes a connection with the appropriate conduit (e.g., a slave request is a queued request).
Communications
To establish communication, the invention specifies the following:
busControl: specifies whether the application is a master or a slave
ioRequest: specifies Read, Write, Read/Write or a Write/Read
ownAddress: specifies the source address of the application device
devAddress: specifies the destination address of the device to communicate with
tag: specifies which conduit to use and a number to match the request with the opposite process
After a communication is complete, the invention specifies the following:
rcvAddress: the address from which the communication originated
rcvTag: the tag used by the opposite process
More particularly, the busControl parameter specifies if the application is to be the master or the slave. With I2C, the master controls the clock and initiates the transmission. Being a master or slave does not determine who is transmitting or receiving. If busControl specifies a master request, an attempt is made to start the request immediately. If that is not possible, it is added to a master list and is started as soon as possible. If busControl specifies a slave request, the request is put onto the slave list and waits until a master sends a message that matches the request's conduit information using the criteria described below.
The ioRequest parameter specifies whether the communication is a Read, Write, Read/Write or Write/Read. A Read is performed by using a master-transmit/slave-receive followed by a master-receive/slave-transmit and a Read/Write uses a master-transmit/slave-receive followed by a master-receive/slave-transmit followed by a master-transmit/slave-receive.
The ownAddress parameter is the I2C address of the application device; and the devAddress parameter is the address of the device to which the communication is intended. The tag parameter is used to associate the request to a particular conduit. The rcvAddress parameter is set by the driver to the address of the master connected to a slave request. It is meaningful when the devAddress is 255 and the slave request was used as a "catch all" request. The rcvTag parameter is set by the driver to the tag of the master request connected to a slave request. It is meaningful when the slave's tag is 255.
Setting up a Communication
To setup a communication, one device uses the ioRequest to initiate a Read or Read/Write. The other device then use the ioRequest to immediately start a Write or Write/Read. The ownAddress is used to identify the device initiating the ioRequest and the devAddress is used to identify the opposite device.
The application also supplies a tag. As described above, the devAddress and tag together identify the conduit over which the communication takes place.
Address and Tag
The slave application may specify an exact devAddress, in which case the conduit exists to a specific master. Alternatively, it may supply a devAddress of 255. This "catch all" address is used to connect with any master which does not match an existing request. Similarly, the slave may supply a tag of 255. This "catch all" tag is used to connect with any tag which does not match an existing request. By using 255 for both the devAddress and the tag, a slave may catch unsolicited messages form all masters. The master may specify a tag of 0 so as to communicate with devices which do not use this protocol. In this case, the above described packet is not used. The master may not specify a tag or devAddress of 255.
Address and Tag Matching Criteria
When a master begins a transmission, the address and tag are transmitted as a header to the application data. The slave receives these bytes and searches for a request which matches. As stated earlier. This match forms the conduit. The slave performs this match in the following case orders:
Case 1: A request that matches both the master's address and tag
Case 2: If that fails, a request with a tag of 255 and a match on the master's address
Case 3: If that fails, a request with a an address of 255 and a match on the master's tag
Case 4: If that fails, a request with both the address and tag being 255
If no match is found, the incoming message is indiscriminately discarded. After the match is found, the slave request becomes active and the address and tag bytes are discarded. These cases are illustrated in more detail in
Those skilled in the art should appreciate that cases 1-4 can occur in different orders, and that other cases can be used instead of the cases 1-4 without departing from the scope of the invention.
Conduit Interlock
When a request is completed, the conduit is interlocked while the application callback is in effect. This allows the application to make another request before a new communication begins. Without this, a master could perform two back-to-back Writes before the slave is ready for the 2nd Write (and hence the 2nd Write would be lost). Similarly, a process that wants to use a master Write followed by a slave Read (perhaps to send a command and receive a response) could not be guaranteed to initiate the slave Read prior to receiving the response. The master implements the interlocking by withholding release of the bus during the application callback. A slave implements the interlocking by withholding the dummy read (a Not Acknowledged condition to finish slave communication). Note that withholding the dummy read does not hold the bus since the bus is already free from operation of the master. Withholding the dummy read does, however, prevent the 1st byte of an incoming message from passing into the driver, accomplishing the needed interlock.
Protocol Examples
As illustrated in
By way of specific example,
In a further example,
Those skilled in the art should appreciate that
Table 1 illustrates a time sequence of a bus interlock example for repeated operations, in accord with the invention.
TABLE 1 | |
Example of bus interlock time sequence to facilitate repeated operations | |
between controllers A and B | |
Controller A: | Controller B: |
Slave reads from controller A, tag 1 | |
Master writes to controller B, tag 1 | |
Master transmits with stop | Slave receives |
Callback, bus is held | Callback, bus is held |
Slave read from controller B, tag 1 | Master write to controller A, tag 1 |
Return from callback, bus is | Return from callback, dummy read |
dropped | |
Slave receives | Master transmits with stop |
Callback, bus is held | Callback, bus is held |
Return from callback, dummy read | Return from callback, bus is dropped |
Through a pair of buses (e.g., SCSI buses) 110a, 110b, raid controller 100 connects to the host server 106 via host adapters 112a, 112b. In the host 106, an application 108 communicates (e.g., stores or receives data) with the disk drives 102, 104 as if through a single controller 100.
Communication between controllers 100a, 100b is facilitated by the I2C bus protocol system architecture described above. For example, an array of I2C devices such as device 114 can also connect to the bus 101 to provide a range of useful information such as disk drive temperature. At the same time, controllers 100a, 100b maintain communication along bus 101 for purposes of redundant operation.
For disclosure purposes, Appendix A contains I2C bus specifications as provided by Philips Semiconductor and which are hereby incorporated by reference.
The invention thus attains the objects set forth above, among those apparent from the preceding description. Since certain changes may be made in the above methods and systems without departing from the scope of the invention, it is intended that all matter contained in the above description or shown in the accompanying drawing be interpreted as illustrative and not in a limiting sense. It is also to be understood that the following claims are to cover all generic and specific features of the invention described herein, and all statements of the scope of the invention which, as a matter of language, might be said to fall there between.
Patent | Priority | Assignee | Title |
10002098, | Oct 09 2014 | NetApp, Inc.; NetApp, Inc | Methods and systems for sharing information between processors |
6820212, | Feb 20 2001 | Digi-Data Corporation | RAID system having channel capacity unaffected by any single component failure |
7177911, | May 09 2002 | ARRIS ENTERPRISES LLC | System and method for discovery and remote control of computers |
7213099, | Dec 30 2003 | Intel Corporation | Method and apparatus utilizing non-uniformly distributed DRAM configurations and to detect in-range memory address matches |
7216204, | Aug 27 2001 | Intel Corporation | Mechanism for providing early coherency detection to enable high performance memory updates in a latency sensitive multithreaded environment |
7225281, | Aug 27 2001 | Intel Corporation | Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms |
7231467, | Nov 17 2003 | AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED | Method and apparatus for providing an inter integrated circuit interface with an expanded address range and efficient priority-based data throughput |
7246197, | Jan 25 2005 | Intel Corporation | Software controlled content addressable memory in a general purpose execution datapath |
7281070, | Jan 28 2005 | GOOGLE LLC | Multiple master inter integrated circuit bus system |
7302509, | Jul 03 2003 | INTERDIGITAL CE PATENT HOLDINGS | Method and data structure for random access via a bus connection |
7334233, | Apr 28 2003 | International Business Machines Corporation | Method and apparatus for multiple slaves to receive data from multiple masters in a data processing system |
7334234, | Apr 28 2003 | International Business Machines Corporation | Method and apparatus for transferring data to virtual devices behind a bus expander |
7337275, | Aug 13 2002 | Intel Corporation | Free list and ring data structure management |
7418571, | Jan 10 2003 | Intel Corporation | Memory interleaving |
7487505, | Aug 27 2001 | Intel Corporation | Multithreaded microprocessor with register allocation based on number of active threads |
7500034, | Dec 10 2003 | Hewlett-Packard Development Company, L.P.; Hewlett-Packard Development Company, LP | Multiple integrated circuit control |
7610451, | Jan 25 2002 | Intel Corporation | Data transfer mechanism using unidirectional pull bus and push bus |
7676621, | Sep 12 2003 | Hewlett Packard Enterprise Development LP | Communications bus transceiver |
7873966, | Apr 28 2003 | International Business Machines Corporation | Method and apparatus for transferring data to virtual devices behind a bus expander |
7990081, | Mar 21 2006 | MORGAN STANLEY SENIOR FUNDING, INC | Pulse width modulation based LED dimmer control |
Patent | Priority | Assignee | Title |
5758127, | Jul 21 1994 | VLSI Technology, Inc. | Method and apparatus for providing a plurality of protocol serial communications |
5768277, | Jul 25 1994 | PANASONIC ELECTRIC WORKS CO , LTD | Automatic ID assigning device for network instruments |
5859847, | Dec 20 1996 | Square D Company | Common database system for a communication system |
5897663, | Dec 24 1996 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Host I2 C controller for selectively executing current address reads to I2 C EEPROMs |
6163849, | Oct 01 1997 | Round Rock Research, LLC | Method of powering up or powering down a server to a maintenance state |
6209022, | Apr 10 1996 | Polaris Innovations Limited | Slave station with two output circuits commonly and directly connected to a line for serially transmitting data to a master station in two operational modes |
6260127, | Jul 13 1998 | CONVERSANT INTELLECTUAL PROPERTY MANAGEMENT INC | Method and apparatus for supporting heterogeneous memory in computer systems |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Oct 06 1998 | QUICKSALL, EDWARD S | Adaptec, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 009512 | /0487 | |
Oct 09 1998 | Adaptec, Inc. | (assignment on the face of the patent) | / | |||
Jun 21 2010 | ADPT Corporation | ADPT Corporation | MERGER AND CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 046268 | /0592 | |
Jun 21 2010 | Adaptec, Inc | ADPT Corporation | MERGER AND CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 046268 | /0592 | |
Jun 01 2011 | ADPT Corporation | HUPPER ISLAND LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 026459 | /0871 | |
Apr 20 2012 | HUPPER ISLAND LLC | RPX Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028142 | /0922 | |
Jun 19 2018 | RPX Corporation | JEFFERIES FINANCE LLC | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 046486 | /0433 | |
Oct 23 2020 | JEFFERIES FINANCE LLC | RPX Corporation | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 054486 | /0422 |
Date | Maintenance Fee Events |
Mar 10 2006 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Feb 25 2010 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Mar 10 2014 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Sep 10 2005 | 4 years fee payment window open |
Mar 10 2006 | 6 months grace period start (w surcharge) |
Sep 10 2006 | patent expiry (for year 4) |
Sep 10 2008 | 2 years to revive unintentionally abandoned end. (for year 4) |
Sep 10 2009 | 8 years fee payment window open |
Mar 10 2010 | 6 months grace period start (w surcharge) |
Sep 10 2010 | patent expiry (for year 8) |
Sep 10 2012 | 2 years to revive unintentionally abandoned end. (for year 8) |
Sep 10 2013 | 12 years fee payment window open |
Mar 10 2014 | 6 months grace period start (w surcharge) |
Sep 10 2014 | patent expiry (for year 12) |
Sep 10 2016 | 2 years to revive unintentionally abandoned end. (for year 12) |