N900 Hardware Subsystems
(→Phone) |
m (Protected "N900 Hardware Subsystems": Excessive vandalism ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))) |
||
(53 intermediate revisions not shown) | |||
Line 1: | Line 1: | ||
- | There are many interacting hardware subsystems in the | + | There are many interacting hardware subsystems in the [[Nokia N900|N900]]. |
These can be split roughly into several areas. | These can be split roughly into several areas. | ||
- | =Audio= | + | ==Audio== |
- | = | + | ===Software=== |
- | + | Most of the audio on the N900 is handled by gstreamer and PulseAudio. | |
+ | See [[Documentation/Maemo_5_Developer_Guide/Using_Multimedia_Components/Introduction|the API documentation on sound]] | ||
- | = | + | ===Main Speakers=== |
+ | ===Earpiece=== | ||
+ | ===Headphones=== | ||
- | =Phone= | + | The [[N900 headphone amplifier|headphone amplifier]] is a TPA6130a2 manufactured by Texas Instruments. |
- | ==GPS== | + | |
- | ==2G/3G phone module== | + | ===Composite out=== |
- | ==SIM== | + | |
+ | ===FM radio transmitter=== | ||
+ | |||
+ | {{main|N900 FM radio transmitter}} | ||
+ | |||
+ | ===FM radio receiver=== | ||
+ | |||
+ | {{main|N900 FM radio receiver}} | ||
+ | |||
+ | ===Bluetooth audio=== | ||
+ | |||
+ | ==Video== | ||
+ | |||
+ | The GPU is a SGX530 licensed from Imagination Technologies. | ||
+ | |||
+ | ===Display=== | ||
+ | ====Built in LCD==== | ||
+ | |||
+ | {{main|N900 LCD panel}} | ||
+ | |||
+ | ====Composite out==== | ||
+ | ===Front camera (VGA)=== | ||
+ | |||
+ | {{main|N900 VGA camera}} | ||
+ | |||
+ | ===Rear camera (5MP)=== | ||
+ | |||
+ | {{main|N900 camera sensor}} | ||
+ | |||
+ | ====Rear camera autofocus==== | ||
+ | |||
+ | {{main|N900 Hardware Autofocus}} | ||
+ | |||
+ | ====Rear camera LED flash==== | ||
+ | |||
+ | {{main|N900 Hardware Flash Torch}} | ||
+ | |||
+ | ====Rear camera warning light==== | ||
+ | ====Rear camera shutter==== | ||
+ | |||
+ | ==USB== | ||
+ | |||
+ | {{main|N900 Hardware USB}} | ||
+ | |||
+ | ===USB socket=== | ||
+ | |||
+ | {{main|N900 Hardware USB Socket}} | ||
+ | |||
+ | ==User interaction== | ||
+ | |||
+ | ===Touchscreen=== | ||
+ | |||
+ | The touch screen controller is a [http://www.ti.com/product/tsc2005 TSC 2005]. | ||
+ | |||
+ | ===Accelerometer=== | ||
+ | |||
+ | {{main|N900 accelerometer}} | ||
+ | |||
+ | ===Switches=== | ||
+ | ====Lock Switch==== | ||
+ | ====Headset Switch==== | ||
+ | ====Jack Switch==== | ||
+ | ====Camera Button==== | ||
+ | ====Power Button==== | ||
+ | ====Volume control==== | ||
+ | ====Rear cover presence switch==== | ||
+ | ====Camera cover==== | ||
+ | |||
+ | ===Keyboard=== | ||
+ | Matrix keyboard connected to row[7:0] x col[7:0] dedicated matrixscanner IO at GAIA. | ||
+ | |||
+ | All QCOL traces and QROW7 trace are equipped with ESD protection against static discharge. | ||
+ | |||
+ | Each switch under a key is connected to one col and one row trace | ||
+ | |||
+ | {| class="wikitable" border=1 | ||
+ | !(QCOL->!! __7__ !! __ 6__ !! __5__ !! __4__ !! __3__ !! __ 2__ !! __1__ !! __0_) | ||
+ | |- | ||
+ | |QROW7: || || || || || || VOL- || VOL+ || I | ||
+ | |- | ||
+ | |QROW6: || || || || || || || || U | ||
+ | |- | ||
+ | |QROW5: || || || || || || || || Y | ||
+ | |- | ||
+ | |QROW4: || || Shft|| Fn || CTRL|| || Rght || Down || T | ||
+ | |- | ||
+ | |QROW3: || Left|| || SPC || M || N || B || V || R | ||
+ | |- | ||
+ | |QROW2: || C || X || Z || || CR || Up || . || E | ||
+ | |- | ||
+ | |QROW1: || L || K || J || H || G || F || D || W | ||
+ | |- | ||
+ | |QROW0: || S || A || || Del || , || P || O || Q | ||
+ | |} | ||
+ | |||
+ | For example pressing W connects QCOL0 to QROW1.<br> | ||
+ | The matrix controller applies a certain level (say +3V) to first col QCOL0 and checks which rows are going to same level (QROW1 for 'W'). Then next col is the one to get +3V, and so on. | ||
+ | |||
+ | For Shift-X QCOL6 will pull up QROW4 and QROW2. For Shift-T QCOL6 and QCOL0 will pull up QROW4. | ||
+ | |||
+ | Now the nasty part of it:<br> | ||
+ | Shift-Fn-K means QCOL5 will pull up QROW4, and QCOL6 will pull up QROW4 and QROW1. BUT: when QROW4 is pulled high by QCOL5, then via the closed Shift key QROW4 will pull high QCOL6, and QCOL6 will pull high QROW1 via K switch. So the matrix controller will see QROW4 and QROW1 both be high, for either of QCOL5 and QCOL6, which looks like 4 keys shift, Fn, K, and(!) J are pressed. Situation for Shift-Fn-J is absolutely identical, and so Sh-Fn-J and Sh-Fn-K are not distinguishable.<br> | ||
+ | for 3-key tupels the combinations are:<br> | ||
+ | Sh-Fn-J/K<br> | ||
+ | Sh-Fn-X/Z<br> | ||
+ | Sh-CTL-K/H<br> | ||
+ | Sh-CTL-A/Del<br> | ||
+ | Fn-CTL-Space/M<br> | ||
+ | Fn-CTL-J/H<br> | ||
+ | |||
+ | Looking at this matrix, we notice two things:<br> | ||
+ | 1: Nokia missed to give real dedicated col-lines to the qualifier keys, though there would have been plenty, by simply arranging the keys in matrix in a smarter way. That would have completely avoided the above described N-key rollover issue<br> | ||
+ | Another common method to fix this problem is to use diodes in series with the key switches. A diode for Ctrl, Shift, and Fn would be just enough here, adding to the BOM with only 3 parts a 2ct each.<br> | ||
+ | 2: U has its own row, and U is used for flashing (USB-flashing mode). Coincidence? | ||
+ | Let's assume Nokia EE thought (for whatever weird reason) it might be clever to have a dedicated row for U (so they just pull high QCOL0 in NOLO bootloader and check the 8 row lines by reading in that byte). Then we might start to wonder what's with Y. And with I? And with T R W E Q? Nota bene press&hold multiple of those keys will always still deliver a nice clean easy-to-read 8bit result, on the presumed test during boot in NOLO | ||
+ | |||
+ | (p.s: maybe the rows are driven high - or even low - and the cols are the sensing inputs. I've not checked this, as it doesn't change anything in the basic function principle and neither changes the problem with N-key rollover. For the NOLO speculations it makes more sense to have inputs on rows and drivers on cols, though) | ||
+ | |||
+ | ====Keyboard Slide==== | ||
+ | |||
+ | ===Proximity sensor=== | ||
+ | |||
+ | ===Ambient Light Meter=== | ||
+ | |||
+ | {{main|N900 light meter}} | ||
+ | |||
+ | ==Power management== | ||
+ | |||
+ | {{main|N900 Hardware Power management}} | ||
+ | |||
+ | ===Battery=== | ||
+ | |||
+ | ====Charge meter==== | ||
+ | |||
+ | {{main|N900 Hardware Charge Meter}} | ||
+ | |||
+ | ===Battery Charger=== | ||
+ | |||
+ | {{main|N900 Hardware Battery Charger}} | ||
+ | |||
+ | ===Gaia=== | ||
+ | ===CPU=== | ||
+ | |||
+ | ==Phone== | ||
+ | |||
+ | {{main|N900 Hardware Phone}} | ||
+ | |||
+ | ===GPS=== | ||
+ | |||
+ | {{main|N900 Hardware GPS}} | ||
+ | |||
+ | ===2G/3G phone module=== | ||
+ | ===SIM=== | ||
+ | |||
+ | ==Local Network== | ||
+ | ===Bluetooth=== | ||
+ | |||
+ | {{main|N900 Hardware Bluetooth}} | ||
+ | |||
+ | ===Wifi=== | ||
+ | |||
+ | {{main|N900 Hardware Wifi}} | ||
+ | |||
+ | ===USB Networking=== | ||
+ | |||
+ | ==Computing== | ||
+ | ===CPU=== | ||
+ | |||
+ | {{main|N900 CPU}} | ||
+ | |||
+ | ====Many functional blocks of the CPU==== | ||
+ | ====Chipset==== | ||
+ | |||
+ | {{main|N900 Hardware Chipset}} | ||
+ | |||
+ | ===Memory=== | ||
+ | ====Flash Memory==== | ||
+ | =====Internal 32GB eMMC===== | ||
+ | =====Internal 'OneNand' 256MB===== | ||
+ | =====External microSD card===== | ||
+ | |||
+ | ====RAM==== | ||
+ | |||
+ | ==Other hardware (needs merging into hierarchy above)== | ||
+ | |||
+ | (Click on device for wiki page with more information) | ||
+ | |||
+ | {| class="wikitable" border="1" cellpadding="2" | ||
+ | !Device | ||
+ | !Model (Manufacturer) | ||
+ | !Description | ||
+ | !Driver | ||
+ | |- | ||
+ | |[[N900 Hardware LED|LED Controller]] || LP5523 || || | ||
+ | |- | ||
+ | |[[N900 Hardware Digital Audio Data Serial Interface|Digital Audio Data Serial Interface]] || TLV320AIC3x || || | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | For those wanting to hack on the hardware drivers, the Maemo Kernel source code can be downloaded here: | ||
+ | http://repository.maemo.org/pool/fremantle/free/k/kernel/ | ||
- | |||
- | |||
- | |||
- | |||
[[Category:N900 Hardware]] | [[Category:N900 Hardware]] |
Latest revision as of 23:45, 24 March 2018
There are many interacting hardware subsystems in the N900.
These can be split roughly into several areas.
Contents |
Audio
Software
Most of the audio on the N900 is handled by gstreamer and PulseAudio. See the API documentation on sound
Main Speakers
Earpiece
Headphones
The headphone amplifier is a TPA6130a2 manufactured by Texas Instruments.
Composite out
FM radio transmitter
Main article: N900 FM radio transmitter
FM radio receiver
Main article: N900 FM radio receiver
Bluetooth audio
Video
The GPU is a SGX530 licensed from Imagination Technologies.
Display
Built in LCD
Main article: N900 LCD panel
Composite out
Front camera (VGA)
Main article: N900 VGA camera
Rear camera (5MP)
Main article: N900 camera sensor
Rear camera autofocus
Main article: N900 Hardware Autofocus
Rear camera LED flash
Main article: N900 Hardware Flash Torch
Rear camera warning light
Rear camera shutter
USB
Main article: N900 Hardware USB
USB socket
Main article: N900 Hardware USB Socket
User interaction
Touchscreen
The touch screen controller is a TSC 2005.
Accelerometer
Main article: N900 accelerometer
Switches
Lock Switch
Headset Switch
Jack Switch
Camera Button
Power Button
Volume control
Rear cover presence switch
Camera cover
Keyboard
Matrix keyboard connected to row[7:0] x col[7:0] dedicated matrixscanner IO at GAIA.
All QCOL traces and QROW7 trace are equipped with ESD protection against static discharge.
Each switch under a key is connected to one col and one row trace
(QCOL-> | __7__ | __ 6__ | __5__ | __4__ | __3__ | __ 2__ | __1__ | __0_) |
---|---|---|---|---|---|---|---|---|
QROW7: | VOL- | VOL+ | I | |||||
QROW6: | U | |||||||
QROW5: | Y | |||||||
QROW4: | Shft | Fn | CTRL | Rght | Down | T | ||
QROW3: | Left | SPC | M | N | B | V | R | |
QROW2: | C | X | Z | CR | Up | . | E | |
QROW1: | L | K | J | H | G | F | D | W |
QROW0: | S | A | Del | , | P | O | Q |
For example pressing W connects QCOL0 to QROW1.
The matrix controller applies a certain level (say +3V) to first col QCOL0 and checks which rows are going to same level (QROW1 for 'W'). Then next col is the one to get +3V, and so on.
For Shift-X QCOL6 will pull up QROW4 and QROW2. For Shift-T QCOL6 and QCOL0 will pull up QROW4.
Now the nasty part of it:
Shift-Fn-K means QCOL5 will pull up QROW4, and QCOL6 will pull up QROW4 and QROW1. BUT: when QROW4 is pulled high by QCOL5, then via the closed Shift key QROW4 will pull high QCOL6, and QCOL6 will pull high QROW1 via K switch. So the matrix controller will see QROW4 and QROW1 both be high, for either of QCOL5 and QCOL6, which looks like 4 keys shift, Fn, K, and(!) J are pressed. Situation for Shift-Fn-J is absolutely identical, and so Sh-Fn-J and Sh-Fn-K are not distinguishable.
for 3-key tupels the combinations are:
Sh-Fn-J/K
Sh-Fn-X/Z
Sh-CTL-K/H
Sh-CTL-A/Del
Fn-CTL-Space/M
Fn-CTL-J/H
Looking at this matrix, we notice two things:
1: Nokia missed to give real dedicated col-lines to the qualifier keys, though there would have been plenty, by simply arranging the keys in matrix in a smarter way. That would have completely avoided the above described N-key rollover issue
Another common method to fix this problem is to use diodes in series with the key switches. A diode for Ctrl, Shift, and Fn would be just enough here, adding to the BOM with only 3 parts a 2ct each.
2: U has its own row, and U is used for flashing (USB-flashing mode). Coincidence?
Let's assume Nokia EE thought (for whatever weird reason) it might be clever to have a dedicated row for U (so they just pull high QCOL0 in NOLO bootloader and check the 8 row lines by reading in that byte). Then we might start to wonder what's with Y. And with I? And with T R W E Q? Nota bene press&hold multiple of those keys will always still deliver a nice clean easy-to-read 8bit result, on the presumed test during boot in NOLO
(p.s: maybe the rows are driven high - or even low - and the cols are the sensing inputs. I've not checked this, as it doesn't change anything in the basic function principle and neither changes the problem with N-key rollover. For the NOLO speculations it makes more sense to have inputs on rows and drivers on cols, though)
Keyboard Slide
Proximity sensor
Ambient Light Meter
Main article: N900 light meter
Power management
Main article: N900 Hardware Power management
Battery
Charge meter
Main article: N900 Hardware Charge Meter
Battery Charger
Main article: N900 Hardware Battery Charger
Gaia
CPU
Phone
Main article: N900 Hardware Phone
GPS
Main article: N900 Hardware GPS
2G/3G phone module
SIM
Local Network
Bluetooth
Main article: N900 Hardware Bluetooth
Wifi
Main article: N900 Hardware Wifi
USB Networking
Computing
CPU
Main article: N900 CPU
Many functional blocks of the CPU
Chipset
Main article: N900 Hardware Chipset
Memory
Flash Memory
Internal 32GB eMMC
Internal 'OneNand' 256MB
External microSD card
RAM
Other hardware (needs merging into hierarchy above)
(Click on device for wiki page with more information)
Device | Model (Manufacturer) | Description | Driver |
---|---|---|---|
LED Controller | LP5523 | ||
Digital Audio Data Serial Interface | TLV320AIC3x |
For those wanting to hack on the hardware drivers, the Maemo Kernel source code can be downloaded here:
http://repository.maemo.org/pool/fremantle/free/k/kernel/
- This page was last modified on 24 March 2018, at 23:45.
- This page has been accessed 141,347 times.