Skip to content

Commit

Permalink
Fix bit timing for 500kbit
Browse files Browse the repository at this point in the history
  • Loading branch information
monkbroc committed Mar 13, 2016
1 parent 5fcc8f3 commit fbdd653
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 16 deletions.
7 changes: 4 additions & 3 deletions main.go
Expand Up @@ -112,10 +112,11 @@ func sendMessages(txChan mcp2515.MsgChan) {
i := uint8(0)
for {
var message mcp2515.Message
message.Id = 0x110
message.Id = 0x2AA
message.Length = 8
message.Data[0] = i
message.Data[1] = 1
for j := 0; j < 8; j++ {
message.Data[j] = 0xAA
}
i += 1

select {
Expand Down
12 changes: 5 additions & 7 deletions mcp2515/mcp2515.go
Expand Up @@ -20,7 +20,6 @@ type MCP2515 struct {
mu sync.RWMutex
}


// Prescalers for a 16 MHz oscillator with a 8 Time Quanta bit time
var prescalers = map[int]int{
125000: 7,
Expand Down Expand Up @@ -49,9 +48,7 @@ func (d *MCP2515) Setup(baudRate int) error {
glog.V(1).Infof("mcp2515: setup")

d.baudRate = baudRate
//prescaler, ok := prescalers[baudRate]
prescaler := 3
ok := true
prescaler, ok := prescalers[baudRate]
if !ok {
return fmt.Errorf("Baud rate not supported %v", baudRate)
}
Expand All @@ -70,13 +67,13 @@ func (d *MCP2515) Setup(baudRate int) error {
initialCNF1(prescaler),
)

data, err := d.readRegister("CNF1", 1)
data, err := d.readRegister("CNF2", 1)

if err != nil {
return err
}

if data[0] != initialCNF1(prescaler) {
if data[0] != initialCNF2() {
return errors.New("CAN chip not responding")
}

Expand All @@ -99,7 +96,8 @@ func initialCNF2() uint8 {
// PHSEG1 = 3 TQ
// BTLMODE = 1 => Use CNF3 for PHSEG2
return (1 << bits["BTLMODE"]) |
(2 << bits["PHSEG10"])
(2 << bits["PHSEG10"]) |
(0 << bits["PRSEG"])
}

func initialCNF3() uint8 {
Expand Down
12 changes: 6 additions & 6 deletions mcp2515/spi.go
Expand Up @@ -13,7 +13,7 @@ func (d *MCP2515) writeRegister(register string, data ...uint8) error {
return err
}

glog.V(2).Infof("mcp2515: writeRegister %v", register)
glog.V(2).Infof("mcp2515: writeRegister %v=%v", register, data)

command := []uint8{commands["WRITE"], address}
buffer := append(command, data...)
Expand All @@ -27,27 +27,27 @@ func (d *MCP2515) readRegister(register string, length int) ([]uint8, error) {
return nil, err
}

glog.V(2).Infof("mcp2515: readRegister %v", register)

command := []uint8{commands["READ"], address}
buffer := make([]uint8, len(command) + length)
copy(buffer, command)

err = d.Bus.TransferAndReceiveData(buffer)
data := buffer[len(command):]

glog.V(2).Infof("mcp2515: readRegister %v=%v", register, data)

return data, err
}

func (d *MCP2515) readStatus() (uint8, error) {
glog.V(2).Infof("mcp2515: readStatus")
command := []uint8{commands["READ_STATUS"]}
buffer := make([]uint8, len(command) + 1)
copy(buffer, command)

err := d.Bus.TransferAndReceiveData(buffer)

data := buffer[len(command)]
glog.V(2).Infof("status=%v", data)
glog.V(4).Infof("mcp2515: readStatus=%v", data)

return data, err
}
Expand Down Expand Up @@ -90,7 +90,7 @@ func (d *MCP2515) receiveMessage(rxBuffer uint8) (*Message, error) {
message := Message{
Id: 0,
Extended: (data[1] & (1 << bits["IDE"])) != 0,
Length: (data[2] & 0xF),
Length: (data[4] & 0xF),
Time: time.Now(),
}

Expand Down

0 comments on commit fbdd653

Please sign in to comment.