diff --git a/src/machine/machine_rp2_i2c.go b/src/machine/machine_rp2_i2c.go index bc9de79c5..54a5e5357 100644 --- a/src/machine/machine_rp2_i2c.go +++ b/src/machine/machine_rp2_i2c.go @@ -58,15 +58,15 @@ type I2C struct { } var ( - ErrInvalidI2CBaudrate = errors.New("invalid i2c baudrate") - ErrInvalidTgtAddr = errors.New("invalid target i2c address not in 0..0x80 or is reserved") - ErrI2CGeneric = errors.New("i2c error") - ErrRP2040I2CDisable = errors.New("i2c rp2040 peripheral timeout in disable") - errInvalidI2CSDA = errors.New("invalid I2C SDA pin") - errInvalidI2CSCL = errors.New("invalid I2C SCL pin") - ErrI2CAlreadyListening = errors.New("i2c already listening") - ErrI2CWrongMode = errors.New("i2c wrong mode") - ErrI2CUnderflow = errors.New("i2c underflow") + errInvalidI2CBaudrate = errors.New("i2c: invalid baudrate") + errInvalidTgtAddr = errors.New("i2c: invalid target address: not in 0..0x80 or is reserved") + errI2CGeneric = errors.New("i2c: generic error") + errI2CDisable = errors.New("i2c: peripheral timeout in disable") + errInvalidI2CSDA = errors.New("i2c: invalid SDA pin") + errInvalidI2CSCL = errors.New("i2c: invalid SCL pin") + errI2CAlreadyListening = errors.New("i2c: already listening") + errI2CWrongMode = errors.New("i2c: wrong mode") + errI2CUnderflow = errors.New("i2c: underflow") ) // Tx performs a write and then a read transfer placing the result in @@ -84,7 +84,7 @@ var ( // Performs only a write transfer. func (i2c *I2C) Tx(addr uint16, w, r []byte) error { if i2c.mode != I2CModeController { - return ErrI2CWrongMode + return errI2CWrongMode } return i2c.tx(uint8(addr), w, r) } @@ -94,7 +94,7 @@ func (i2c *I2C) Tx(addr uint16, w, r []byte) error { // addr is the address to listen to func (i2c *I2C) Listen(addr uint16) error { if i2c.mode != I2CModeTarget { - return ErrI2CWrongMode + return errI2CWrongMode } return i2c.listen(uint8(addr)) @@ -155,7 +155,7 @@ func (i2c *I2C) Configure(config I2CConfig) error { func (i2c *I2C) SetBaudRate(br uint32) error { if br == 0 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } // I2C is synchronous design that runs from clk_sys @@ -167,7 +167,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error { hcnt := period - lcnt // Check for out-of-range divisors: if hcnt > rp.I2C0_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_Msk || hcnt < 8 || lcnt > rp.I2C0_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_Msk || lcnt < 8 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } // Per I2C-bus specification a device in standard or fast mode must @@ -187,7 +187,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error { } if sdaTxHoldCnt > lcnt-2 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } err := i2c.disable() if err != nil { @@ -220,7 +220,7 @@ func (i2c *I2C) disable() error { i2c.Bus.IC_ENABLE.Set(0) for i2c.Bus.IC_ENABLE_STATUS.Get()&1 != 0 { if ticks() > deadline { - return ErrRP2040I2CDisable + return errI2CDisable } } return nil @@ -286,7 +286,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { const timeout_us = 4_000 deadline := ticks() + timeout_us if addr >= 0x80 || isReservedI2CAddr(addr) { - return ErrInvalidTgtAddr + return errInvalidTgtAddr } txlen := len(tx) rxlen := len(rx) @@ -420,7 +420,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { case abortReason == 0 || abortReason&rp.I2C0_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK != 0: // No reported errors - seems to happen if there is nothing connected to the bus. // Address byte not acknowledged - err = ErrI2CGeneric + err = errI2CGeneric case abortReason&rp.I2C0_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK != 0: // Address acknowledged, some data not acknowledged fallthrough @@ -434,7 +434,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { // listen sets up for async handling of requests on the I2C bus. func (i2c *I2C) listen(addr uint8) error { if addr >= 0x80 || isReservedI2CAddr(addr) { - return ErrInvalidTgtAddr + return errInvalidTgtAddr } err := i2c.disable() @@ -497,7 +497,7 @@ func (i2c *I2C) Reply(buf []byte) error { stat := i2c.Bus.IC_RAW_INTR_STAT.Get() if stat&rp.I2C0_IC_INTR_MASK_M_RD_REQ == 0 { - return ErrI2CWrongMode + return errI2CWrongMode } i2c.Bus.IC_CLR_RD_REQ.Get() // clear restart