From cc7079b0cdae938b1e83953d94d7a3ce37efac73 Mon Sep 17 00:00:00 2001 From: deadprogram Date: Sun, 13 Dec 2020 09:56:59 +0100 Subject: [PATCH] drivers/flash: restore previous calls directly to machine package until we implement SetClockSpeed() Signed-off-by: deadprogram --- flash/flash.go | 12 ++++++------ flash/transport_spi.go | 27 +++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/flash/flash.go b/flash/flash.go index cfa2686..6054f45 100644 --- a/flash/flash.go +++ b/flash/flash.go @@ -135,12 +135,12 @@ func (dev *Device) Configure(config *DeviceConfig) (err error) { // Speed up to max device frequency // I propose a check here for max frequency, but not put that functionality directly into the driver. // Either that or we have to change the signature of the SPI interface in the machine package itself. - // if dev.attrs.MaxClockSpeedMHz > 0 { - // err := dev.trans.setClockSpeed(uint32(dev.attrs.MaxClockSpeedMHz) * 1e6) - // if err != nil { - // return err - // } - // } + if dev.attrs.MaxClockSpeedMHz > 0 { + err := dev.trans.setClockSpeed(uint32(dev.attrs.MaxClockSpeedMHz) * 1e6) + if err != nil { + return err + } + } // Enable Quad Mode if available if dev.trans.supportQuadMode() && dev.attrs.QuadEnableBitMask > 0 { diff --git a/flash/transport_spi.go b/flash/transport_spi.go index 4a19cf2..81db7b3 100644 --- a/flash/transport_spi.go +++ b/flash/transport_spi.go @@ -2,13 +2,12 @@ package flash import ( "machine" - - "tinygo.org/x/drivers" ) type transport interface { configure(config *DeviceConfig) supportQuadMode() bool + setClockSpeed(hz uint32) (err error) runCommand(cmd byte) (err error) readCommand(cmd byte, rsp []byte) (err error) writeCommand(cmd byte, data []byte) (err error) @@ -19,7 +18,7 @@ type transport interface { // NewSPI returns a pointer to a flash device that uses a SPI peripheral to // communicate with a serial memory chip. -func NewSPI(spi drivers.SPI, sdo, sdi, sck, cs machine.Pin) *Device { +func NewSPI(spi *machine.SPI, sdo, sdi, sck, cs machine.Pin) *Device { return &Device{ trans: &spiTransport{ spi: spi, @@ -32,7 +31,7 @@ func NewSPI(spi drivers.SPI, sdo, sdi, sck, cs machine.Pin) *Device { } type spiTransport struct { - spi drivers.SPI + spi *machine.SPI sdo machine.Pin sdi machine.Pin sck machine.Pin @@ -40,11 +39,31 @@ type spiTransport struct { } func (tr *spiTransport) configure(config *DeviceConfig) { + // Configure spi bus + tr.setClockSpeed(5000000) + // Configure chip select pin tr.ss.Configure(machine.PinConfig{Mode: machine.PinOutput}) tr.ss.High() } +func (tr *spiTransport) setClockSpeed(hz uint32) error { + // TODO: un-hardcode this max speed; it is probably a sensible + // default maximum for atsamd and nrf at least + if hz > 24*1e6 { + hz = 24 * 1e6 + } + tr.spi.Configure(machine.SPIConfig{ + Frequency: hz, + SDI: tr.sdi, + SDO: tr.sdo, + SCK: tr.sck, + LSBFirst: false, + Mode: 0, + }) + return nil +} + func (tr *spiTransport) supportQuadMode() bool { return false }