Damien George
3 years ago
2 changed files with 88 additions and 0 deletions
@ -0,0 +1,80 @@ |
|||
# Test machine.I2S data transfer rate, for both TX and RX. |
|||
|
|||
try: |
|||
from machine import Pin, I2S |
|||
except ImportError: |
|||
print("SKIP") |
|||
raise SystemExit |
|||
|
|||
import time, sys |
|||
|
|||
# Configure pins based on the board. |
|||
if "pyboard" in sys.platform: |
|||
i2s_id = 2 |
|||
sck_pin = Pin("Y6") |
|||
ws_pin = Pin("Y5") |
|||
sd_pin = Pin("Y8") |
|||
elif "rp2" in sys.platform: |
|||
i2s_id = 1 |
|||
sck_pin = Pin(0) |
|||
ws_pin = Pin(1) |
|||
sd_pin = Pin(2) |
|||
|
|||
TEST_BYTES = b"01234567" |
|||
RATE = 11025 # frames/sec |
|||
|
|||
|
|||
def test(mode, bits_per_sample, frame_format): |
|||
i2s = I2S( |
|||
i2s_id, |
|||
sck=sck_pin, |
|||
ws=ws_pin, |
|||
sd=sd_pin, |
|||
mode=mode, |
|||
bits=bits_per_sample, |
|||
format=frame_format, |
|||
rate=RATE, |
|||
ibuf=200, |
|||
) |
|||
|
|||
if frame_format == I2S.MONO: |
|||
channels = 1 |
|||
else: |
|||
channels = 2 |
|||
bits_per_frame = bits_per_sample * channels |
|||
buf_len_250ms = bits_per_frame // 8 * RATE // 4 |
|||
|
|||
# Create test data and preload I2S buffers. |
|||
if mode == I2S.TX: |
|||
mode_str = "TX" |
|||
data = TEST_BYTES * (buf_len_250ms // len(TEST_BYTES)) |
|||
i2s.write(data) |
|||
else: |
|||
mode_str = "RX" |
|||
data = bytearray(len(TEST_BYTES) * (buf_len_250ms // len(TEST_BYTES))) |
|||
i2s.readinto(data) |
|||
|
|||
# Time how long it takes to read/write 2 lots of data. |
|||
t0 = time.ticks_ms() |
|||
for i in range(2): |
|||
if mode == I2S.TX: |
|||
i2s.write(data) |
|||
else: |
|||
i2s.readinto(data) |
|||
t1 = time.ticks_ms() |
|||
dt = time.ticks_diff(t1, t0) |
|||
|
|||
i2s.deinit() |
|||
|
|||
# Print out test result, time should be in range of 500ms. |
|||
print(mode_str, bits_per_sample, channels, abs(dt - 500) <= 4) |
|||
|
|||
|
|||
test(I2S.TX, 16, I2S.MONO) |
|||
test(I2S.TX, 16, I2S.STEREO) |
|||
test(I2S.TX, 32, I2S.MONO) |
|||
test(I2S.TX, 32, I2S.STEREO) |
|||
test(I2S.RX, 16, I2S.MONO) |
|||
test(I2S.RX, 16, I2S.STEREO) |
|||
test(I2S.RX, 32, I2S.MONO) |
|||
test(I2S.RX, 32, I2S.STEREO) |
@ -0,0 +1,8 @@ |
|||
TX 16 1 True |
|||
TX 16 2 True |
|||
TX 32 1 True |
|||
TX 32 2 True |
|||
RX 16 1 True |
|||
RX 16 2 True |
|||
RX 32 1 True |
|||
RX 32 2 True |
Loading…
Reference in new issue