Skip to content

Inaccurate SPI clock frequency #8027

@tomiahola

Description

@tomiahola

CircuitPython version

Adafruit CircuitPython 8.1.0 on 2023-05-22; Adafruit Metro M4 Express with samd51j19

Code/REPL

import board
import busio
import digitalio

print("\n")

cs = digitalio.DigitalInOut(board.D5)
cs.direction = digitalio.Direction.OUTPUT
spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI, MISO=board.MISO)

while not spi.try_lock():
    pass
    
baudrates = [1,10,100,1000,5000,10000,25000,50000,100000,500000,1000000,2000000,3000000,4000000,
5000000,6000000,7000000,8000000,9000000,10000000,11000000,12000000,13000000,14000000,15000000,16000000,
17000000,18000000,19000000,20000000,24000000,30000000,40000000,48000000,60000000,75000000,100000000]

for baudrate in baudrates:
    spi.configure(baudrate=baudrate, phase=1, polarity=0)
    print("GIVEN BAUDRATE:", baudrate, "ACTUAL:", spi.frequency)

Behavior

code.py output:
]0;🐍code.py | 8.1.0\

GIVEN BAUDRATE: 1 ACTUAL: 93750
GIVEN BAUDRATE: 10 ACTUAL: 93750
GIVEN BAUDRATE: 100 ACTUAL: 93750
GIVEN BAUDRATE: 1000 ACTUAL: 93750
GIVEN BAUDRATE: 5000 ACTUAL: 93750
GIVEN BAUDRATE: 10000 ACTUAL: 93750
GIVEN BAUDRATE: 25000 ACTUAL: 93750
GIVEN BAUDRATE: 50000 ACTUAL: 93750
GIVEN BAUDRATE: 100000 ACTUAL: 100000
GIVEN BAUDRATE: 500000 ACTUAL: 500000
GIVEN BAUDRATE: 1000000 ACTUAL: 1000000
GIVEN BAUDRATE: 2000000 ACTUAL: 2000000
GIVEN BAUDRATE: 3000000 ACTUAL: 3000000
GIVEN BAUDRATE: 4000000 ACTUAL: 4000000
GIVEN BAUDRATE: 5000000 ACTUAL: 4800000
GIVEN BAUDRATE: 6000000 ACTUAL: 6000000
GIVEN BAUDRATE: 7000000 ACTUAL: 8000000
GIVEN BAUDRATE: 8000000 ACTUAL: 8000000
GIVEN BAUDRATE: 9000000 ACTUAL: 8000000
GIVEN BAUDRATE: 10000000 ACTUAL: 12000000
GIVEN BAUDRATE: 11000000 ACTUAL: 12000000
GIVEN BAUDRATE: 12000000 ACTUAL: 12000000
GIVEN BAUDRATE: 13000000 ACTUAL: 12000000
GIVEN BAUDRATE: 14000000 ACTUAL: 12000000
GIVEN BAUDRATE: 15000000 ACTUAL: 12000000
GIVEN BAUDRATE: 16000000 ACTUAL: 12000000
GIVEN BAUDRATE: 17000000 ACTUAL: 24000000
GIVEN BAUDRATE: 1800000 ACTUAL: 24000000
GIVEN BAUDRATE: 19000000 ACTUAL: 24000000
GIVEN BAUDRATE: 20000000 ACTUAL: 24000000
GIVEN BAUDRATE: 24000000 ACTUAL: 24000000
GIVEN BAUDRATE: 30000000 ACTUAL: 24000000
GIVEN BAUDRATE: 40000000 ACTUAL: 24000000
GIVEN BAUDRATE: 48000000 ACTUAL: 24000000
GIVEN BAUDRATE: 60000000 ACTUAL: 24000000
GIVEN BAUDRATE: 75000000 ACTUAL: 24000000
GIVEN BAUDRATE: 100000000 ACTUAL: 24000000
]0;🐍Done | 8.1.0
Code done running.

Description

Hello, can someone help me to understand why doesn't the frequency match with the given baudrate?

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions