Try using the periph.io libraries; golang.org/x/exp/io/spi is no longer maintained[1].
[1]https://github.com/golang/go/issues/22058#issuecomment-332390766 On Sun, 2017-10-15 at 21:01 -0700, Eugene Dzhurinsky wrote: > Hello! > > I was trying to make the RF522 (RFID reader) to initialize properly. > > After some research (involving Logic analyzer and hardware protocol > dumps) > I realized that either I do something wrong with SPI, or it fails in > general somewhere at the interface/extra side. > > I tried https://github.com/ecc1/spi and that worked, but still I > wondwe > what may go wrong. > > Please take a look at the code dumps: > > *Using ECC1 library:* > > package main > > import ( > "fmt" > "log" > "github.com/ecc1/spi" > ) > > func main() { > > spiDev, err := spi.Open("/dev/spidev0.0", 1000000, 0) > > spiDev.SetMode(0) > spiDev.SetBitsPerWord(8) > spiDev.SetLSBFirst(false) > spiDev.SetMaxSpeed(1000000) > > if err != nil { > log.Fatal(err) > } > > writeSpiData := func(dataIn []byte) (err error) { > err = spiDev.Transfer(dataIn) > return > } > > devWrite := func(address int, data byte) (err error) { > newData := [2]byte{(byte(address) << 1) & 0x7E, data} > fmt.Print("<< ", newData, " ") > err = writeSpiData(newData[0:]) > fmt.Println(">>", newData) > return > } > > if err != nil { > log.Fatal(err) > } > > devWrite(0x01, 0x0F) > > if err != nil { > log.Fatal(err) > } > > } > > > The corresponging protocol dump is: > > <https://lh3.googleusercontent.com/-diHR8oVbhKs/WeQtn46DXBI/AAAAAAAAG > _s/X1Ff22h7N3spLyM0MhfFyjOgIfpJEiJYQCLcBGAs/s1600/screenshot-go- > ecc1.png> > > > From the code dump, I sent *0x02 0x0f *and received *0x0f 0x0 *- > which is > correct, according to the specs. And the SPI analyzer was able to > capture > that. > > > *Now with golang extra spi driver* > > > package main > > import ( > "fmt" > "golang.org/x/exp/io/spi" > "log" > ) > > func main() { > > spiDev, err := spi.Open(&spi.Devfs{ > Dev: "/dev/spidev0.0", > MaxSpeed: int64(1000000), > }) > > spiDev.SetMode(spi.Mode0) > spiDev.SetBitOrder(spi.MSBFirst) > spiDev.SetBitsPerWord(8) > > if err != nil { > log.Fatal(err) > } > > writeSpiData := func(dataIn []byte) (out []byte, err error) { > out = make([]byte, len(dataIn)) > err = spiDev.Tx(dataIn, out) > return > } > > devWrite := func(address int, data byte) (err error) { > newData := [2]byte{(byte(address) << 1) & 0x7E, data} > readBuf, err := writeSpiData(newData[0:]) > fmt.Println(">>", newData, readBuf) > return > } > > if err != nil { > log.Fatal(err) > } > > devWrite(0x01, 0x0F) > > fmt.Println("Done") > > } > > > The resulting protocol analysis is weird: > > <https://lh3.googleusercontent.com/-qXpBwSqEiQI/WeQuUr_pBcI/AAAAAAAAG > _0/FlYaJYo5gywep35Gra2_-9921RegDTA7gCLcBGAs/s1600/screenshot-go-x.png > > > > > Now the question is - am I doing anything wrong with > *golang.org/x/exp/io/spi*, or it is not working for me for another > reason? > > Thanks! > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.