Editing Mer/Documentation/BME Protocol
Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
- | + | This documentation is entirely for the purpose of implementing software gathering battery information on Nokia Internet Tablets, not alteration of battery management state. | |
- | + | ||
- | This documentation is entirely for the purpose of implementing software gathering battery information on Nokia Internet Tablets, not alteration of battery management state | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
Existing code: | Existing code: | ||
Line 60: | Line 54: | ||
struct emsg_bme_bulk_reply { | struct emsg_bme_bulk_reply { | ||
- | uint32 unknown1; | + | uint32 unknown1; |
- | uint32 unknown2; | + | uint32 unknown2; |
- | uint32 unknown3; | + | uint32 unknown3; |
- | uint16 sw_status; // Battery monitor SW status | + | uint16 sw_status; // Battery monitor SW status |
uint16 instaneous_battery_voltage; // Instantaneous battery voltage (mV) | uint16 instaneous_battery_voltage; // Instantaneous battery voltage (mV) | ||
uint16 // Remaining standby time to battery low (mins) | uint16 // Remaining standby time to battery low (mins) | ||
- | uint16 unknown4; | + | uint16 unknown4; |
- | uint16 unknown5; | + | uint16 unknown5; |
uint16 unknown6; | uint16 unknown6; | ||
uint16 // Battery monitor check voltage (mV) | uint16 // Battery monitor check voltage (mV) | ||
- | uint16 // Battery low warning interval counter | + | uint16 // Battery low warning interval counter |
uint16 // Double median filtered battery voltage | uint16 // Double median filtered battery voltage | ||
uint16 // Initial battery monitor voltage (mV) | uint16 // Initial battery monitor voltage (mV) | ||
- | uint16 // Time per battery bar (mins) | + | uint16 // Time per battery bar (mins) |
uint16 // DMF voltage sampled at first battery low (mV) | uint16 // DMF voltage sampled at first battery low (mV) | ||
uint32 // Average phone current (uA) | uint32 // Average phone current (uA) | ||
Line 81: | Line 75: | ||
uint16 // Largest TX-Off/On voltage difference (mV) | uint16 // Largest TX-Off/On voltage difference (mV) | ||
uint8 // Battery bar level log mask | uint8 // Battery bar level log mask | ||
- | uint8 // Previous battery bar level | + | uint8 // Previous battery bar level |
- | uint8 // Battery low reason | + | uint8 // Battery low reason |
- | uint8 // CS state information | + | uint8 // CS state information |
- | uint16 // Number of battery bars | + | uint16 // Number of battery bars |
- | uint16 // Battery type | + | uint16 // Battery type |
uint16 // Temperature, in kelvin | uint16 // Temperature, in kelvin | ||
uint16 // Battery capacity | uint16 // Battery capacity | ||
- | uint16 // Battery impedance (mOhm | + | uint16 // Battery impedance (mOhm) |
- | uint16 // Present value of v_bat_full_level | + | uint16 // Present value of v_bat_full_level |
- | uint16 // Present value of v_bat_low_ths_mv | + | uint16 // Present value of v_bat_low_ths_mv |
- | uint16 unknown7; | + | uint16 unknown7; |
- | uint16 unknown8; | + | uint16 unknown8; |
- | uint16 unknown9; | + | uint16 unknown9; |
- | uint16 // Load current estimated by Batmon4 (uA | + | uint16 // Load current estimated by Batmon4 (uA) |
- | uint16 unknown10; | + | uint16 unknown10; |
}; | }; | ||
</pre> | </pre> | ||
- | The | + | The “Instantaneous battery voltage (mV)” field’s observed values have a certain regular spacing indicating a linear function of some integer value with a smaller range, presumably retu adc register #8. If it is indeed from that register, then note there is a non-zero offset involved: one function that gives values consistent with the set of values observed and that somewhat matches one set of observations of both fields (which unfortunately had a non-negligible delay between sampling the two) is mV = 2252.362 + 2.81361 * adc#8 (where the multiplier is fairly accurate, but the constant could be out by some multiple of 2.81361). -- pjrm. |
- | + | The “Battery monitor check voltage (mV)” field has similar values to the “Instantaneous battery voltage (mV)” field, but without obvious regular spacing. I don't know how it's calculated. -- pjrm. | |
- | + | ||
- | + | ||
- | + | ||
- | The | + | |
Voltage levels depend not just on amount of charge remaining in the battery, but also recent electrical load: the voltage level goes down markedly while the CPU is being heavily used, for example. | Voltage levels depend not just on amount of charge remaining in the battery, but also recent electrical load: the voltage level goes down markedly while the CPU is being heavily used, for example. | ||
Line 111: | Line 101: | ||
There is some weak evidence that the voltage level goes down by about 1mV for each 3 units of backlight level (so 40–50mV for full brightness compared to screen off). The main weakness of this evidence is that there's no serious correction for the effect of CPU usage on voltage, and one would assume CPU usage to correlate with backlight. | There is some weak evidence that the voltage level goes down by about 1mV for each 3 units of backlight level (so 40–50mV for full brightness compared to screen off). The main weakness of this evidence is that there's no serious correction for the effect of CPU usage on voltage, and one would assume CPU usage to correlate with backlight. | ||
- | + | The “Average phone current” field has some strangeness in that if there is a long period of high CPU activity then it takes 3-7 seconds before this field's value increases (even though the voltage field drops straight away, suggesting that the true current does drop straight away); but the field is much quicker to go down once the CPU activity stops, so it's not just a matter of always lagging by a few seconds (such as because of using a simple averaging/smoothing method). One might suggest that this could be because some thread that updates the average is at low priority and doesn't get scheduled for a while, but the "CPU activity" in the experiment consisted of alternating ~100ms of full CPU followed by a usleep of 100ms, so this effect presumably isn't just because of standard kernel scheduling decisions and niceness. | |
- | + | ||
- | The | + | |
- | + | ||
- | + | ||
== Some BULK1 message (0x43, 0x00) == | == Some BULK1 message (0x43, 0x00) == |
Learn more about Contributing to the wiki.