mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
machine: only enable USB-CDC when needed
Enabling USB consumes a lot of power. So it's better to keep it disabled by default when the serial port is set to something other than "usb" (USB-CDC). On my nice!nano clone, it reduces current consumption from 1mA to 0.13mA (and most of the rest is probably consumed by a connected SCD41 sensor). This change might break some expectations, when a board uses USB but not USB-CDC (I think this is rare, but I didn't check specifically).
This commit is contained in:
committed by
Ron Evans
parent
01723025d7
commit
571f34e0e6
@@ -519,6 +519,10 @@ type Serialer interface {
|
||||
RTS() bool
|
||||
}
|
||||
|
||||
func initUSB() {
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
// USB Serial/JTAG Controller
|
||||
// See esp32-c3_technical_reference_manual_en.pdf
|
||||
// pg. 736
|
||||
|
||||
@@ -6,5 +6,6 @@ package machine
|
||||
var Serial Serialer
|
||||
|
||||
func InitSerial() {
|
||||
initUSB()
|
||||
Serial = USBCDC
|
||||
}
|
||||
|
||||
@@ -19,6 +19,17 @@ var (
|
||||
USBCDC Serialer
|
||||
)
|
||||
|
||||
func initUSB() {
|
||||
enableUSBCDC()
|
||||
USBDev.Configure(UARTConfig{})
|
||||
}
|
||||
|
||||
// Using go:linkname here because there's a circular dependency between the
|
||||
// machine package and the machine/usb/cdc package.
|
||||
//
|
||||
//go:linkname enableUSBCDC machine/usb/cdc.EnableUSBCDC
|
||||
func enableUSBCDC()
|
||||
|
||||
type Serialer interface {
|
||||
WriteByte(c byte) error
|
||||
Write(data []byte) (n int, err error)
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"device/arm"
|
||||
"device/sam"
|
||||
"machine"
|
||||
"machine/usb/cdc"
|
||||
_ "machine/usb/cdc"
|
||||
"runtime/interrupt"
|
||||
"runtime/volatile"
|
||||
"unsafe"
|
||||
@@ -26,8 +26,6 @@ func init() {
|
||||
initUSBClock()
|
||||
initADCClock()
|
||||
|
||||
cdc.EnableUSBCDC()
|
||||
machine.USBDev.Configure(machine.UARTConfig{})
|
||||
machine.InitSerial()
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"device/arm"
|
||||
"device/sam"
|
||||
"machine"
|
||||
"machine/usb/cdc"
|
||||
_ "machine/usb/cdc"
|
||||
"runtime/interrupt"
|
||||
"runtime/volatile"
|
||||
)
|
||||
@@ -27,8 +27,6 @@ func init() {
|
||||
initADCClock()
|
||||
enableCache()
|
||||
|
||||
cdc.EnableUSBCDC()
|
||||
machine.USBDev.Configure(machine.UARTConfig{})
|
||||
machine.InitSerial()
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"device/arm"
|
||||
"device/nrf"
|
||||
"machine"
|
||||
"machine/usb/cdc"
|
||||
_ "machine/usb/cdc"
|
||||
"runtime/interrupt"
|
||||
"runtime/volatile"
|
||||
)
|
||||
@@ -26,8 +26,6 @@ func main() {
|
||||
}
|
||||
|
||||
func init() {
|
||||
cdc.EnableUSBCDC()
|
||||
machine.USBDev.Configure(machine.UARTConfig{})
|
||||
machine.InitSerial()
|
||||
initLFCLK()
|
||||
initRTC()
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"device/rp"
|
||||
"internal/task"
|
||||
"machine"
|
||||
"machine/usb/cdc"
|
||||
_ "machine/usb/cdc"
|
||||
"runtime/interrupt"
|
||||
"runtime/volatile"
|
||||
"unsafe"
|
||||
@@ -360,8 +360,6 @@ func machineInit()
|
||||
func init() {
|
||||
machineInit()
|
||||
|
||||
cdc.EnableUSBCDC()
|
||||
machine.USBDev.Configure(machine.UARTConfig{})
|
||||
machine.InitSerial()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user