Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pulling from tmk #6

Merged
merged 47 commits into from
Mar 16, 2015
Merged
Changes from 1 commit
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
1a9cec9
Documentation: small mistake
cub-uanic Nov 20, 2014
60acd89
Fixing typo in console mode
bswinnerton Nov 30, 2014
a6d33e2
Added support for The Ghost Squid controller used for CM XT keyboard.
vovcacik Dec 28, 2014
02a9f8a
Update other_projects.md - added TMK/Ergodox
cub-uanic Jan 3, 2015
05795cb
Compensate timer during prower down
tmk Nov 26, 2014
9179246
Fix USB plug-in while BT mode falls to be enumerated
tmk Nov 26, 2014
20caf67
Fix lufa sendchar() infinite wait loop
tmk Nov 29, 2014
570bcb2
Add LUFA device state to command info
tmk Nov 29, 2014
de29f98
Update MEMO
tmk Nov 29, 2014
825be9d
Disable input buffer for ADC
tmk Dec 2, 2014
25aee43
Clean ADC code of battery_voltage()
tmk Dec 2, 2014
2d7973f
Fix: enable digital input for PF5
tmk Dec 2, 2014
86f82dd
Add wait for charging capacitance of ADC S/H
tmk Dec 3, 2014
ebe4373
Fix power saving while USB suspended
tmk Dec 3, 2014
160e02d
Change RN42 state display
tmk Dec 8, 2014
884c2ab
Update doc
tmk Dec 11, 2014
a679928
Fxi layer stuck of keymap_hasu
tmk Jan 5, 2015
4f121de
rn42: Add rn42_getc and rn42_gets
tmk Jan 10, 2015
1b95b3c
rn42: Add commands for RN-42
tmk Jan 10, 2015
3b3af3b
Increase buffer of rn42_gets() and change rn42_linked()
tmk Jan 11, 2015
2626a32
Use pgmspace for RN-42 commands
tmk Jan 11, 2015
517817b
rn42: Update doc
tmk Jan 15, 2015
65a2ce9
Merge branch 'rn42'
tmk Jan 15, 2015
3e88e8b
hhkb: Fix layer stuck of keymap_hasu
tmk Jan 15, 2015
ce66988
hhkb_rn42: Move doc
tmk Jan 15, 2015
099701d
hhkb: Integrate RN-42 support, remove hhkb_rn42
tmk Jan 16, 2015
c610bae
Merge branch 'rn42_integrate'
tmk Jan 16, 2015
f31cbc7
Changed hotkey for bootloader jump
xauser Nov 12, 2014
d9b5f51
Added NerD 60% support
xauser Nov 11, 2014
2d74020
Added NerD 80% (TKL) support
xauser Nov 23, 2014
07b54cb
Added missing keyboards to main README
xauser Dec 14, 2014
40fd75e
hhkb: Update RN-42 docs
tmk Jan 17, 2015
d32b955
Merge branch 'forhasu' of https://github.com/xauser/tmk_keyboard into…
tmk Jan 19, 2015
507e063
Revert "Changed hotkey for bootloader jump"
tmk Jan 19, 2015
8279226
Merge branch 'xauser-forhasu'
tmk Jan 19, 2015
1cda7b7
Fix typo 'keyobard' #166
tmk Jan 19, 2015
703ca9d
Merge pull request #164 from cub-uanic/patch-2
tmk Jan 19, 2015
a5122d5
Merge branch 'ghost_squid' of https://github.com/vovcacik/tmk_keyboar…
tmk Jan 19, 2015
2e75b13
Merge branch 'vovcacik-ghost_squid'
tmk Jan 19, 2015
aa95d6f
Merge pull request #151 from bswinnerton/typo-fix
tmk Jan 19, 2015
c1ac7f1
Merge pull request #148 from cub-uanic/patch-1
tmk Jan 19, 2015
771347c
Add external projects using tmk_keyboard
tmk Jan 19, 2015
012ec9e
NerD, turn BRK into PAUS to get bootloader jump back.
xauser Jan 19, 2015
e0f3274
Kitten Paw, fix main README link to project.
xauser Jan 20, 2015
e872dd2
Merge pull request #176 from xauser/forhasu
tmk Jan 25, 2015
abf482d
Fix call parameter of suspend_power_down()
tmk Jan 26, 2015
c35c428
infinity: For production model and add SpaceFn
tmk Mar 5, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update doc
tmk committed Jan 15, 2015
commit 884c2ab0f20e62ebd01ca0fd634f7f60558e3088
566 changes: 115 additions & 451 deletions keyboard/hhkb_rn42/MEMO.txt
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ Roving RN-42
Bug:
- with Nexus5 keyboard and mouse are very laggy.

- lose USB connection during power-down mode
- lose USB connection during power-down mode - DONE
- USB initialize code in main() causes this - WRONG
- Do not power-down during USB connection is active - DONE 11/11
(USB_DeviceState == USB_DEVICE_Configured) is used to check USB connection
@@ -18,27 +18,57 @@ Bug:
- time out interrupt is lost while power down?
- interrupt of watchdog timer compensates timer counter(avr/suspend.c)

- USB plug-in while BT failes
- USB plug-in fails while BT
- it ends in suspend state
- maybe, not responsive to host enumeration process due to power-down.
- matrix_power_down() only when state is unattached - 11/26
- need to observe a while
- repeated CHARGING/FULL_CHARGED
- In LTC sharp pulses are observed.
- MCP has no pulse but still has a problem.
- needs more wait before read pin state?
- wrongly suspended when powered from adapter without USB connection
- needs more wait before read pin state? - NO
- wrongly suspended when powered from adapter without USB connection - DONE
- suspend event may occur when plug into adapter
- and never wake until conected to real USB line
- without debug print via USB no problem; CSW(wake just after suspend as real USB line)
- seems like USB print causes this problem after suspended

- Factory Reset PIO4 doesn't work
- the reason is unclear - 12/08 NOT LOOK INTO ANY MORE
- WORKAROUND: use serial pins(3.3V, GND, RX and TX)
- SF,1 and R,1 to set factory defalult


Todo:
- sendchar() in lufa.c block loop - 11/29
- block loop when powered with AC adapter
- FrameNumber is not updated when adapter powered
- LED cover and switch knob and new Slide Switch
- RN42 auto configuration
- configure the module as HID device every time powering up
- this'll reduce work load of assembly

- move rn42 to protocol directory when it becomes reusable stack

- sendchar() in lufa.c no buffer
- no buffering. character lost can be caused.
- LUFA sendchar should be buffered and serial_uart.c buffur size is too large(256).

- switch BT host connections
- BT operations
- disconnect
- new connection
- switch next connection
- remove connection

- sendchar() in lufa.c block loop - DONE 11/29
- block loop when powered with AC adapter
- FrameNumber is not updated when adapter powered

Improving:
- ADC resolution
AVR120
AVR32138
- Enhancing ADC resolution by oversampling
AVR121 http://www.atmel.com/images/doc8003.pdf
- disable digital input buffer DIDR(7.8.6)

Design:
- suspend.h - DONE 11/26
@@ -85,6 +115,24 @@ USB connection check: state of USB deivce


Power saving:
- Pro2 current consumption
- active: 138.2mA(no device on Hub)
- suspended: 30.9mA(WakeUp enabled DIPSW6)
- suspended: 0mA->46.0mA(WakeUp disabled DIPSW6)
- Pro current consumption
- active: 54.0mA
- suspended: 40.5mA(WakeUp enabled DIPSW6)
- suspended: 0.3mA(WakeUp disabled DIPSW6)

- RN42 3.3V
- disconnected(Idle): 5mA (config mode)
- connected(Active):
SW,0000: 23-26mA
SW,0010: 27-29mA worse than 0000 for unknown reason
SW,0020: 17-19mA mouse NG
SW,0030: 13-16mA laggy mouse NG
SW,0050: 10-13mA laggy mouse NG

- matrix power saving
- power saving while externally powered and not while unpluged
- confirm suspend mode lufa.c: matrix_power_*, suspend_wakeup_condition
@@ -105,135 +153,11 @@ Power saving:
- Suspend: Clear Suspend Bit, Freeze clock, disable PLL, MCU sleep(21.13)
- Voltage reference(8.1.1)
- to reduce power consumption while power down mode

Improving:
- BT LED; connecting, linked, sleeping, deep sleeping
- Battry LED; blink(using timer?)
- move rn42 to protocol directory when it becomes reusable stack
- LUFA sendchar should be buffered and serial_uart.c buffur size is too large(256).
- ADC resolution
AVR120
AVR32138
- Enhancing ADC resolution by oversampling
AVR121 http://www.atmel.com/images/doc8003.pdf


Testing:
- Factroy reset doesn't work; need to **test again** 10K pull-up is too high?
- Lipo voltage ADC value is not stabilized
- DCDC converter: squeaky inducter; try other inductors

- Keymap layer bug: during space is pressed(mousekey) press Fn(HHKB) then release space before Fn, in result HHKB layer is locked(toggled) unintentionally.


Done:
- low battery alert(solid light) 09/04


Power routing
-------------
Current:
(USB) +---(Lipo)
| | |
| | +------+ DPDT
| | |Switch/-----------------------+
| | +------+ |
| +-------+ | |
+-|Charger| | |
| +-------+ | +---+ |
| | |MCU| |
| | +---+ |
| | | |
| | | |
+--------------+ +-----+ +------+ +---/--+ +-----+
|Power Selector|--|DC 5V|--|DC3.3V|---|Switch|----|RN-42|
+--------------+ +-----+ +------+ +------+ +-----+
USB Power is boosted unnecessarily, not harmful?

Idea 1:
(USB) +---(Lipo)
| | |
| | +------+ DPDT
| | |Switch/----------+
| | +------+ |
| +-------+ | |
+-|Charger| | |
| +-------+ | +---+ |
| +-----+ |MCU| |
| |DC 5V| +---+ |
| +-----+ | |
| | | |
+--------------+ | +---/--+ +------+ +-----+
|Power Selector|-----+---|Switch|----|DC3.3V|-----|RN-42|
+--------------+ +------+ +------+ +-----+
To enable BT when USB powered it still needs to turn siwtch on, Lipo consumes quinscent current at 5V converter in vain.(Not good)

Idea 2:
(USB) +---(Lipo)
| | |
| | +------+
| | |Switch|
| | +------+
| +-------+ |
+-|Charger| |
| +-------+ | +---+
| +-----+ |MCU|----+ Controlled by firmware
| |DC 5V| +---+ | On: Lipo powered
| +-----+ | | Off: USB powered
| | | |enable
+--------------+ | +------+ +-----+
|Power Selector|-----+---|DC3.3V|-----|RN-42|
+--------------+ +------+ +-----+
MCU can controlled power of RN-42 without hardware switch.
When USB powered and switch is on Lipo consumes quinscent current at 5V converter in vain.(Not good)

Idea 3:
(USB) +---(Lipo)
| | |
| | +------+
| | |Switch|SPST(or without)
| | +------+
| +-------+ |
+-|Charger| |
| +-------+ | +---+
| | |MCU|----+ Controlled by firmware
| | +---+ | On: Lipo powered
| | | | Off: USB powered
| | | |enable
+--------------+ +-----+ +------+ +-----+
|Power Selector|-|DC 5V|-|DC3.3V|-----|RN-42|
+--------------+ +-----+ +------+ +-----+
Switch is needed to save Lipo when not used because decent power saving is not available now. If firmware can turn off BT module completely and make MCU deep sleep the switch will be not even needed.





DONE:
- BT_INDICATOR LED turns on wrongly when touching line or pin. -- pull-up enabled on PF6/GPIO2 08/30
- Lipo charger configuration: fast charge time: USB charger spec? -- used 2kohm
- use LED of charger to alarm low battery. LED should be powered directly from Lipo? - cancel; powered from VUSB
- Use RTS in serial_uart.c to resolve missing chars from help message of RN-42 - done
- CTS/RTS lines are needed? just connect in loop back if no flow control is needed. - done
- add IO pin to charger status CHRG; LED control(low) and detect charge status(input HiZ) 07.24
- LINKED: add trace on PIO2 to PF6 07.24
- Lipo voltage ADC sensing
- Lipo charger MCP73831: needs capacitor 4.7uF *2
- USB connection check - 07.01
- BT on/off check: whether RX line is pulled up? - checking RTS 07.01
- USB/BT switching BT is on -> BT, BT is off -> USB - 07.01
- Under voltage lock out UVLO for protection of Lipo - Lipo has discharge protection at 3.100V 07.01
- Power saving: HHKB scan, BT radio control - 9h with 850mAh, this is enough 07.01
- Power selector doesn't work; Q4 MOSFET leaks from Lipo to USB power line. -- use Schottky instead 07/04
- unset ADEN before sleep(24.7)



TROUBLE SHOOT
-------------
07/16 After fix of voltage dividor on GPIO6, had a trouble that it could not send a char to BT module, though could receive.
Found R8 had wrong 1K resistor and changed to 10K, after that it can send to the module again. Not sure how it had sent with the wrong 1K before.

07/18 On Linux, had an USB related trouble; keyobard or console didn't work for some reason. Changing PID cured this problem. Very annoying, took very long time before resolved it.



@@ -249,7 +173,7 @@ Protection spec:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/BatteryProtection.pdf
min typical max
over-charge 4.255 4.280 4.305
over-charge discover? 4.030 4.080 4.130
over-charge discover? 4.030 4.080 4.130
over-discharge 2.827 2.900 2.973
over-discharge discover 3.022 3.100 3.178

@@ -260,325 +184,65 @@ ADC voltage monitor: voltage divider 10K+10K(0.5)
------------------
4.20 0x347(839)
3.10 0x26b(619)




Configuration

TROUBLE SHOOT
-------------
Ver 6.15 04/26/2013
(c) Roving Networks
***Settings***
BTA=0006664B3AE3
BTName=tmkBT-3AE3
Baudrt(SW4)=115K
Mode =DTR
Authen=2
Bonded=0
Rem=000000000000
***ADVANCED Settings***
SrvName= keyboard/mouse
SrvClass=0000
DevClass=0000
InqWindw=0100
PagWindw=0100
CfgTimer=255
StatuStr=NULL
HidFlags=3c
DTRtimer=8
KeySwapr=0
***OTHER Settings***
Profile= HID
CfgChar= $
SniffEna=8010
LowPower=0
TX Power=0
IOPorts= 0
IOValues=0
Sleeptmr=0
DebugMod=0
RoleSwch=0



Serial connection
-----------------
Serial line: 115200bps, 8bit, 1-stopbit, non-parity, no flow control
SSP: 115200bps, 8bit, 1-stopbit, non-parity, no flow control(via Bluetooth)

To enter command mode disconnect the module from host and type '$$$'.(you will see 'CMD')
To exit type '---'(you will see 'END') and '+' to get local echo.



Setting command mode
--------------------
S-,tmkBT // Device name
SS,keyboard/mouse // service name
SM,4 // Auto Connect DTR mode
SW,8010 // Sniff enable 0x10*0.625ms=10ms; 50ms is laggish and not much power save
S~,6 // HID profile
SH,003C // HID register
SY,0004 // Transmit power




Other options:
SC,0000 // COD: 000005C0 (see HID spec/Bluegiga doc)
SD,05C0 // bit 12-8 7 6 5-0
// 00101 1 1 0
// peripheral pointing keybaord joystick, gamepad, ...
SM,6 // Pairing mode: auto connect
SM,4 // Master mode: Connection can be controled with GPIO6




HID profile
-----------
S~,6 HID profile
S~,0 SPP profile
R,1 reboot


Apple iOS
---------
Keyboard can be used with iPhone, but mouse cannot.
To operate iOS with keyboard is not so useful, though.
There may be iOS specific scancodes?


HID flag register
-----------------
SH,0200
GH

10 0000 0000(0200) default
00 0011 1000(0038) Combo
|| | | |\_\____ number of paired devices to which the module can reconnect
|| | | \_______ send out reports over UART (0xFF <len> <data>)
|| \__\_________ descriptor type
|\______________ toggle virtual keyboard on iOS when first connected
\_______________ Force HID mode if GPIO11 is high on power-up

Descriptor type:
0000: keybaord
0001: Game Pad
0010: Mouse
0011: Combo
0100: Joystick
1xxx: reserved


Out report - Indicator
----------------------
0xFE 0x02 0x01 <LED_state>


LED Status
----------
Configuring 10 times per sec
Startup/configuration timer 2 times per sec
Discoverable/Inquiring/Idle once per sec
Connected solid on


Pairing
-------
First, host initiates pairing process and once it is done, auto connect will work thereafter.
SM,3 Master mode
SM,4 Auto Connect DTR Mode uses GPIO6 to make and break connection(Mode =DTR)
confirm: auto connect works and control connection with GPIO6
SM,5 Auto Connect ANY Mode (Mode =ANY)
each time GPIO is set, make inquiry and connect to the first found device
SM,6 automatically reconnect(Mode =Pair)
confirm: auto connect works well but difficult to enter command mode.

SR,Z removes all remote addresses for reconnecting.
can be used to connect another host
SR,I registers last inquiry address


Fast data mode
--------------
The module enters fast data mode after 'remote configuration timer' window is passed from power on.
In this mode the module does not accept '$$$' to enter command mode.

Power Management
----------------
Inquiry and Page window Idle or Active (3.1.1)
Downside: delay in discovery or connection time
SI, // set inquiry scan window(discovery) on/off duty?
SJ, // set page scan window(connection)
This reduces averaege power >20mA to 5mA(3mA in Sniff mode)

Sniff mode Transmit
Sniff mode is disabled by default and radio is active continuously when connected.(25-30mA)
In Sniff mode the radio wakes up intermittently and sleeps in very low power mode.(2mA)
SW,<val> // set interval timer(*0.625ms) 0000-7FFF

Deep sleep Idle (3.1.2)
In this mode the module shuts down completly and only draws about 300uA. To enable this set the most signifant bit(0x8000) of Sniff interaval timer.
SW,8320 // deep sleep enable(interval=0x320*0.625=500ms)
In normal sleep the firmware is still running in idle mode, and wakes up about 20 times per second to check ports, update LEDs, etc. During deep sleep, the firmware actually stops runnig some tasks and the LEDs only update about once per second.
To wake from deep sleep there are three ways: (in worst case wake up takes 5ms)
*send a charactor to the UART(first charactor will be lost)
*toggle CTS low to high and wait 5ms
*wake automatically every slot time(<val>*0.625ms)
Once the radio is awake it stay active for exactly 1 second of inactivity and then sleeps again.
Downside: latency and data loss

Disable Output driver Idle or Active (3.1.3)
S%,1000 // set all GPIO pins(0-11) to inputs.

Lower Transmit Power Idle or Active (3.1.4)
SY,<hex> // transmit power setting(takes effect after a power cycle and reboot)
Downside: reducing effective range


Optimizig for Latency
---------------------
By default the firmware is optimized for throughput.
SQ,16 // set latency bit
SQ,0 // unset latency bit


Configuration timer settings
----------------------------
Remote configuration is used for the module to be configured with various commands over Bluetooth(SPP profile only?).

The module has remote configuration timer to allow remote configuration over Bluetooth after power up in Slave mode. In Master modes the remote configuration timer is set to 0(no remote configuration). (In Trigger Master mode the timer is used as an idle timer to break the connection after time expires with no charactors receive.)
ST,0 // no remote, no local when connected
ST,<1-252> // local and remote with timeout in seconds from power up
ST,253 // local only without timeout
ST,254 // remote only without timeout
ST,255 // local and remote without timeout


Android
-------
3.7.1.5 Note: To connect with Android phone the modules must wake up 11ms every 2.5seconds.


Commands
--------
SC,
SM,<val>
SD,
SP,<string> Pin code(alpahnumeric)
SQ,<mask> Special configuration(GPIO, discovery mode, low latency, reboot, UART)
SR,<hex> Store remote address
SR,Z Erase all address
SS,<string> Set service name(1-20)**
ST,<val> Remote configuration timer(Master:0, Slave:0-255, Triger:as idle timer)
SU,<val> UART baud rate
SW,<val> low-power sniff mode** deep sleep and wake up every 625us * <val>
SX,<0|1> bonding enable only acceps device that matches the stored address
SY,<hex> power setting**
SZ,<val> non-standard raw baud rate <val>=baud*0.004096
S~,<val> Profile 0:SPP, 5:APL, 6:HID
S-,<string> Device name -15 alphanumeric charactors
S?,<0|1> role switch enable
S$,<char> command mode char
$|,<hex> low-power connect mode deep sleep/active(discoverable and connectable) cycle
D display basic setting
E display extended setting
GB display the device's Bluetooth address
GF display Bluetooth address of connected device
GK show connection status
GR show remote address for reconnecting
G& show GPIO pin
G<char> show stored setting
+ toggle local echo on/off
& show GPIO 3,4,6,7(DIP switch)
C connect to stored remote address
C,<address> connect last address
CFI connect and go into fast data mode
CFR connect and go into fast data mode
CT,<address>,<val> connect to the address and disconnect after val?
F,1 fast data mod:
H display help
I,<time>,<cod> inquiry scan with <cod>
IN
IQ scan
IS inquiry scan with 001F00
J hide pin code
K, kill disconnects current connection
L link quality
M show modem signlal status
O display other settings
P,<car> pass through?
Q quiet mode make the module not discoverable
Q,0 discoverable and connectable
Q,1 not discoverable and not connectable
Q,2 not discoverable and connectable
Q,? display current quiet mode
R,1 reboot
T,<0|1> pass received data while in command mode
U,<baud>,<parity> change UART setting tentatively
V display firmware version
W wake from quiet mode enable discovery and connection
Z deep sleep mode(<2mA)



help
----
*** SET COMMANDS ***
SA,<3,0> - Authentication
SC,<hex> - Service Class
SD,<hex> - Device Class
SE,<1-16> - UUID
SF,1 - Factory Defaults
SH,<hex> - HID flags
SI,<hex> - Inquiry Scan Window
SJ,<hex> - Page Scan Window
SL,<E,O,N> - Parity
SM,<0-5> - Mode (0=slav,1=mstr,2=trig,3=auto,4=DTR,5=Any)
SN,<name> - Name
SO,<text> - conn/discon Status
SP,<text> - Pin Code
SR,<adr> - Remote Address
SS,<text> - Service Name
ST,<num> - Config Timer
SU,<rate> - Baudrate
SW,<hex> - Sniff Rate
SX,<1,0> - Bonding
SY,<hex> - TX power
SZ,<num> - Raw Baudrate
S~,<0-6> - Profile (0=SPP,1=DCE,2=DTE,3=MDM,4=D&S,6=HID
S?,<0-1> - role switch
S$,<char> - CMD mode char
S@,<hex> - io port dir
S&,<hex> - io port val
S%,<hex> - io boot dir
S^,<hex> - io boot val
S*,<hex> - pio(8-11) set
S|,<hex> - low power timers
S+,<num> - DTR timer
S=,<hex> - Key mapper
S:,<num> - sleep timer
*** DISPLAY ***
D - Basic Settings
E - Extended Settings
G<X> - Stored setting
GB - BT Address
GF - BT Address of Last Connection
GK - Connect Status
G& - I/O Ports
V - Firmare version
*** OTHER ***
C,<adr> - Connect
F,1 - Fast Mode
I,<time>,<cod> - Device Scan Inquiry
J - Hide Pin Code
K, - Kill (disconnect)
L, - toggle local echo
P,<text> - Pass Thru
Q - Quiet (no discovery)
R,1 - Reboot
T,<0,1> - send data in CMD mode
U,<rate>,<E,O,N> - Temp Uart Change
Z - low power sleep
& - Read switches
07/16 After fix of voltage dividor on GPIO6, had a trouble that it could not send a char to BT module, though could receive.
Found R8 had wrong 1K resistor and changed to 10K, after that it can send to the module again. Not sure how it had sent with the wrong 1K before.

07/18 On Linux, had an USB related trouble; keyobard or console didn't work for some reason. Changing PID cured this problem. Very annoying, took very long time before resolved it.

12/07 rn42_rts() read 1 every time. R12 broke in open mode(no coductive), idk why, too much heat with soldering? and PF1 pin was not soldered.
It resolved with resoldering PF1 and new resistor on R12.




Done:
- low battery alert(solid light) 09/04
- *** Rev.E BT test *** - DONE
- with MCP73832, new Schottky, tantalum caps - DONE 12/07
* MCP73832 doesn't leak from Vcc pin when unpluged and battery powered
34mV vs 2.07V(MCP73831) at Vcc pin
MCP73832 doesn't need revese protection diode D5
* PMEG2010ER is very low VF while reverse current/voltage is high
VF=0.96 vs 1.98(RB160M-30TR)with Fluke 175
Anode of D11 is 680mV vs 20mV(RB160M-30TR)
780mV is still low < 1.4V VBUS plugin detection(21.11)
this doesn't cause false VBUS detect
and 780mV on MCP73832 Vcc pin is also no problem.
D5 can be removed.
- ADC divider switching - DONE 12/07
* Drain and Source of Q4 Pch was reversed wrongly on Rev.E.

- reverse current from Lipo charger - DONE 12/07
* MCP73832 has no recverse current from Vcc pin unlike MCP73831


- Rev.F design - DONE
- current measure point - DONE 12/08
- change value of cap 68->47 - DONE 12/08
- PPTC land pattern: no solder jumper, use 0Ohm resistor instead - CANCEL 12/08
- Q4 Pch FET: wrong Drain and Source - DONE 12/08
- D5 can be removed. - DONE 12/08



- BT_INDICATOR LED turns on wrongly when touching line or pin. -- pull-up enabled on PF6/GPIO2 08/30
- Lipo charger configuration: fast charge time: USB charger spec? -- used 2kohm
- use LED of charger to alarm low battery. LED should be powered directly from Lipo? - cancel; powered from VUSB
- Use RTS in serial_uart.c to resolve missing chars from help message of RN-42 - done
- CTS/RTS lines are needed? just connect in loop back if no flow control is needed. - done
- add IO pin to charger status CHRG; LED control(low) and detect charge status(input HiZ) 07.24
- LINKED: add trace on PIO2 to PF6 07.24
- Lipo voltage ADC sensing
- Lipo charger MCP73831: needs capacitor 4.7uF *2
- USB connection check - 07.01
- BT on/off check: whether RX line is pulled up? - checking RTS 07.01
- USB/BT switching BT is on -> BT, BT is off -> USB - 07.01
- Under voltage lock out UVLO for protection of Lipo - Lipo has discharge protection at 3.100V 07.01
- Power saving: HHKB scan, BT radio control - 9h with 850mAh, this is enough 07.01
- Power selector doesn't work; Q4 MOSFET leaks from Lipo to USB power line. -- use Schottky instead 07/04
13 changes: 13 additions & 0 deletions keyboard/hhkb_rn42/PowerSave.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
RN-42
=====


12/11
Power Comsumption
MCU+HHKB
--------
Battery drive:
idle 18.9mA
active 35.8mA

USB powered:
40.0mA


HHKB key switch power control
-----------------------------
MOS FET Nch: BSS138 or IRLML6344T, either works and no apparent difference.