Skip to content

Rust driver for the AXP209 PMIC using embedded-hal. Work-in-progress! Don't use it yet. ๐Ÿ˜ƒ

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

RandomInsano/axp209-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

30 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

The AXP209 is a power management chip made by X-Powers for use mainly in Allwinner ARM system-on-a-chip reference designs. It can be found in quite a few systems, so if you've got a strange need to control it from a supported Rust target, this'll get you there.

The machines I know of so far using it:

The big challenge with interfacing with this chip is that because it controls power, the kernel has exclusive access to it. That's probably a good thing if you don't know what you're doing, and if you brick your little computer, that's on you. ๐Ÿ˜œ

This driver doesn't try to implement every feature yet and only supports the following:

  • Reading various channels of the ADC
    • Internal temperature
    • Battery level (0 - 100%)
    • Battery voltage, charging amperage, draining amperage
    • VBUS voltage, amperage (usually tied to USB input)
    • Power input voltage, amperage (additional external power)
    • TS input (for external temperatures or backup battery)
    • Voltage at GPIO 0 or 1
  • Reading the power status
    • Is external power coming in?
    • Where's it coming from?
    • Is there a battery attached?
    • Is that battery (dis)charging?
  • Using the internal 127 minute timer (see timer_control)
  • Turning various output voltages on and off

Here's the output from the example program which runs on the PocketChip:

Battery level: 100%
Voltage: 4184mV
Discharge Current: 0mA
Charge Current:    0mA
ACIN Voltage:      0mV
ACIN Current:      0mA
Vbus Voltage:      0mV
Vbus Current:      0mA
Temperature:       47ยฐC
Temp Sensor Pin:   0mV
Ipsout?!:          4583mV

ADC Control Flags: BATTERY_VOLTAGE | BATTERY_CURRENT | ACIN_VOLTAGE | ACIN_CURRENT | APS_VOLTAGE | TS | TEMPERATURE
Power Control Flags: LDO3 | DCDC2 | LDO4 | LDO2 | DCDC3 | EXTEN
Power Status Flags:  VBUS_PRESENT | VBUS_USABLE | VBUS_ABOVE_HOLD | START_ON_POWER
Charge Status Flags: BATTERY_PRESENT

Timer:
	Expired: false
	Time (minutes): 0

If there's a feature you'd like to see implemented, either open an issue or create a pull request if you're feeling helpful. Also feel free to open an issue if you have general questions.

If you need some examples, check the examples folder. They won't work until if you have a kernel that is accessing to the chip so expect some difficulty there. Because I was using the chip on a single board computer, I had to re-compile my kernel with every AXP20X feature disabled.

License

This crate is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

About

Rust driver for the AXP209 PMIC using embedded-hal. Work-in-progress! Don't use it yet. ๐Ÿ˜ƒ

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages