@@ -58,15 +58,15 @@ type I2C struct {
58
58
}
59
59
60
60
var (
61
- ErrInvalidI2CBaudrate = errors .New ("invalid i2c baudrate" )
62
- ErrInvalidTgtAddr = errors .New ("invalid target i2c address not in 0..0x80 or is reserved" )
63
- ErrI2CGeneric = errors .New ("i2c error" )
64
- ErrRP2040I2CDisable = errors .New ("i2c rp2040 peripheral timeout in disable" )
65
- errInvalidI2CSDA = errors .New ("invalid I2C SDA pin" )
66
- errInvalidI2CSCL = errors .New ("invalid I2C SCL pin" )
67
- ErrI2CAlreadyListening = errors .New ("i2c already listening" )
68
- ErrI2CWrongMode = errors .New ("i2c wrong mode" )
69
- ErrI2CUnderflow = errors .New ("i2c underflow" )
61
+ errInvalidI2CBaudrate = errors .New ("i2c: invalid baudrate" )
62
+ errInvalidTgtAddr = errors .New ("i2c: invalid target address: not in 0..0x80 or is reserved" )
63
+ errI2CGeneric = errors .New ("i2c: generic error" )
64
+ errI2CDisable = errors .New ("i2c: peripheral timeout in disable" )
65
+ errInvalidI2CSDA = errors .New ("i2c: invalid SDA pin" )
66
+ errInvalidI2CSCL = errors .New ("i2c: invalid SCL pin" )
67
+ errI2CAlreadyListening = errors .New ("i2c: already listening" )
68
+ errI2CWrongMode = errors .New ("i2c: wrong mode" )
69
+ errI2CUnderflow = errors .New ("i2c: underflow" )
70
70
)
71
71
72
72
// Tx performs a write and then a read transfer placing the result in
84
84
// Performs only a write transfer.
85
85
func (i2c * I2C ) Tx (addr uint16 , w , r []byte ) error {
86
86
if i2c .mode != I2CModeController {
87
- return ErrI2CWrongMode
87
+ return errI2CWrongMode
88
88
}
89
89
return i2c .tx (uint8 (addr ), w , r )
90
90
}
@@ -94,7 +94,7 @@ func (i2c *I2C) Tx(addr uint16, w, r []byte) error {
94
94
// addr is the address to listen to
95
95
func (i2c * I2C ) Listen (addr uint16 ) error {
96
96
if i2c .mode != I2CModeTarget {
97
- return ErrI2CWrongMode
97
+ return errI2CWrongMode
98
98
}
99
99
100
100
return i2c .listen (uint8 (addr ))
@@ -155,7 +155,7 @@ func (i2c *I2C) Configure(config I2CConfig) error {
155
155
func (i2c * I2C ) SetBaudRate (br uint32 ) error {
156
156
157
157
if br == 0 {
158
- return ErrInvalidI2CBaudrate
158
+ return errInvalidI2CBaudrate
159
159
}
160
160
161
161
// I2C is synchronous design that runs from clk_sys
@@ -167,7 +167,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error {
167
167
hcnt := period - lcnt
168
168
// Check for out-of-range divisors:
169
169
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 {
170
- return ErrInvalidI2CBaudrate
170
+ return errInvalidI2CBaudrate
171
171
}
172
172
173
173
// Per I2C-bus specification a device in standard or fast mode must
@@ -187,7 +187,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error {
187
187
}
188
188
189
189
if sdaTxHoldCnt > lcnt - 2 {
190
- return ErrInvalidI2CBaudrate
190
+ return errInvalidI2CBaudrate
191
191
}
192
192
err := i2c .disable ()
193
193
if err != nil {
@@ -220,7 +220,7 @@ func (i2c *I2C) disable() error {
220
220
i2c .Bus .IC_ENABLE .Set (0 )
221
221
for i2c .Bus .IC_ENABLE_STATUS .Get ()& 1 != 0 {
222
222
if ticks () > deadline {
223
- return ErrRP2040I2CDisable
223
+ return errI2CDisable
224
224
}
225
225
}
226
226
return nil
@@ -286,7 +286,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) {
286
286
const timeout_us = 4_000
287
287
deadline := ticks () + timeout_us
288
288
if addr >= 0x80 || isReservedI2CAddr (addr ) {
289
- return ErrInvalidTgtAddr
289
+ return errInvalidTgtAddr
290
290
}
291
291
txlen := len (tx )
292
292
rxlen := len (rx )
@@ -420,7 +420,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) {
420
420
case abortReason == 0 || abortReason & rp .I2C0_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK != 0 :
421
421
// No reported errors - seems to happen if there is nothing connected to the bus.
422
422
// Address byte not acknowledged
423
- err = ErrI2CGeneric
423
+ err = errI2CGeneric
424
424
case abortReason & rp .I2C0_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK != 0 :
425
425
// Address acknowledged, some data not acknowledged
426
426
fallthrough
@@ -434,7 +434,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) {
434
434
// listen sets up for async handling of requests on the I2C bus.
435
435
func (i2c * I2C ) listen (addr uint8 ) error {
436
436
if addr >= 0x80 || isReservedI2CAddr (addr ) {
437
- return ErrInvalidTgtAddr
437
+ return errInvalidTgtAddr
438
438
}
439
439
440
440
err := i2c .disable ()
@@ -497,7 +497,7 @@ func (i2c *I2C) Reply(buf []byte) error {
497
497
stat := i2c .Bus .IC_RAW_INTR_STAT .Get ()
498
498
499
499
if stat & rp .I2C0_IC_INTR_MASK_M_RD_REQ == 0 {
500
- return ErrI2CWrongMode
500
+ return errI2CWrongMode
501
501
}
502
502
i2c .Bus .IC_CLR_RD_REQ .Get () // clear restart
503
503
0 commit comments