243 lines
11 KiB
Plaintext
243 lines
11 KiB
Plaintext
*** Variables ***
|
|
${ACCEL} sysbus.i2c1.accel
|
|
${UART} sysbus.usart2
|
|
${ACCEL_POLLING_SAMPLE} @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-accel_polling.elf-s_731368-a41b79116936bdadbee51e497847273f971ed409
|
|
${ACCEL_POLLING_SAMPLE_14BIT} @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-accel_polling-high_performance.elf-s_731368-049f6743622eb0b8068dbc2a24742561c8fa046a
|
|
${CSV2RESD} ${RENODETOOLS}/csv2resd/csv2resd.py
|
|
|
|
*** Keywords ***
|
|
Execute Python Script
|
|
[Arguments] ${path} ${args}
|
|
|
|
Evaluate subprocess.run([sys.executable, "${path}", ${args}]) sys,subprocess
|
|
|
|
Create Machine
|
|
Execute Command using sysbus
|
|
Execute Command mach create
|
|
Execute Command machine LoadPlatformDescription @platforms/cpus/stm32l072.repl
|
|
Execute Command machine LoadPlatformDescriptionFromString 'accel: Sensors.LIS2DW12 @ i2c1 0x2d'
|
|
Create Terminal Tester ${UART}
|
|
Create Log Tester 0
|
|
Execute Command logLevel -1 ${ACCEL}
|
|
|
|
Format Fixed Point Integer As Decimal
|
|
[Arguments] ${value} ${places}
|
|
|
|
${minus}= Set Variable ${EMPTY}
|
|
IF ${value} < 0
|
|
${minus}= Set Variable -
|
|
${value}= Evaluate abs(${value})
|
|
END
|
|
|
|
${divisor}= Evaluate 10**${places}
|
|
${units}= Evaluate ${value} / ${divisor}
|
|
${fraction}= Evaluate ${value} % ${divisor}
|
|
${string}= Evaluate "${minus}%d.%0${places}d" % (${units}, ${fraction})
|
|
|
|
RETURN ${string}
|
|
|
|
Wait For Peripheral Reading
|
|
[Arguments] ${microg} ${resolution}
|
|
|
|
IF ${resolution} == 12
|
|
${sensitivity}= Set Variable 976
|
|
${shift}= Set Variable 4
|
|
ELSE IF ${resolution} == 14
|
|
${sensitivity}= Set Variable 244
|
|
${shift}= Set Variable 2
|
|
ELSE
|
|
Fail Invalid resolution ${resolution} bits
|
|
END
|
|
|
|
${steps}= Evaluate int(${microg} / ${sensitivity})
|
|
${outValue}= Evaluate ${steps} * ${sensitivity}
|
|
${outStr}= Format Fixed Point Integer As Decimal ${outValue} 6
|
|
|
|
${lsbs}= Evaluate abs(${steps}) << ${shift}
|
|
# Use twos-complement representation if negative
|
|
IF ${steps} < 0
|
|
${lsbs}= Evaluate (abs(${lsbs}) ^ 0xffff) + 1
|
|
END
|
|
${lsbsStr}= Convert To Hex ${lsbs} prefix=0x length=4
|
|
|
|
Wait For Line On Uart lis2dw12@2d *\\[g]: *\\( *${outStr}, *${outStr}, *${outStr}\\) treatAsRegex=true pauseEmulation=true
|
|
Wait For Log Entry Conversion done with sensitivity: 0.${sensitivity}, result: ${lsbsStr}
|
|
|
|
Wait For Peripheral Reading For Set Value And Known LSBs
|
|
[Arguments] ${microg} ${resolution} ${lsbs}
|
|
|
|
${g}= Format Fixed Point Integer As Decimal ${microg} 6
|
|
# For LIS2DW12 operating in FIFO mode, setting `DefaultAcceleration` would be enough
|
|
# as it would start returning default samples after RESD stream is finished.
|
|
# For Bypass mode it needs to be set explicitly (through `Acceleration` properties),
|
|
# because the actual sample is kept until it is overwritten by a new sample.
|
|
Execute Command ${ACCEL} DefaultAccelerationX ${g}
|
|
Execute Command ${ACCEL} DefaultAccelerationY ${g}
|
|
Execute Command ${ACCEL} DefaultAccelerationZ ${g}
|
|
Execute Command ${ACCEL} AccelerationX ${g}
|
|
Execute Command ${ACCEL} AccelerationY ${g}
|
|
Execute Command ${ACCEL} AccelerationZ ${g}
|
|
# Wait for the expected LSBs value keeping the entry for use by the following keyword
|
|
Wait For Log Entry result: ${lsbs} timeout=2 pauseEmulation=true keep=true
|
|
Wait For Peripheral Reading ${microg} ${resolution}
|
|
|
|
Create RESD File
|
|
[Arguments] ${resdArgs}
|
|
${resdPath}= Evaluate tempfile.mktemp() tempfile
|
|
${resdArgs}= Catenate SEPARATOR=, ${resdArgs} r"${resdPath}"
|
|
|
|
Execute Python Script ${CSV2RESD} ${resdArgs}
|
|
|
|
RETURN ${resdPath}
|
|
|
|
Test Teardown And Cleanup RESD File
|
|
[Arguments] ${resdPath}
|
|
|
|
Test Teardown
|
|
Remove File ${resdPath}
|
|
|
|
LIS2DW12 Should Return Data From RESD
|
|
[Arguments] ${firmware} ${resolution}
|
|
${resdArgs}= Catenate SEPARATOR=,
|
|
... "--input", r"${CURDIR}/LIS2DW12-samples.csv"
|
|
... "--frequency", "1"
|
|
... "--start-time", "0"
|
|
... "--map", "acceleration:x,y,z:x,y,z"
|
|
|
|
${resdPath}= Create RESD File ${resdArgs}
|
|
|
|
Create Machine
|
|
|
|
Execute Command sysbus LoadELF ${firmware}
|
|
Wait For Line On Uart Booting Zephyr OS pauseEmulation=true
|
|
|
|
Execute Command ${ACCEL} FeedAccelerationSamplesFromRESD @${resdPath}
|
|
|
|
Wait For Peripheral Reading 100000 ${resolution}
|
|
Wait For Peripheral Reading 200000 ${resolution}
|
|
Wait For Peripheral Reading 300000 ${resolution}
|
|
Wait For Peripheral Reading 400000 ${resolution}
|
|
Wait For Peripheral Reading 500000 ${resolution}
|
|
Wait For Peripheral Reading 600000 ${resolution}
|
|
Wait For Peripheral Reading 700000 ${resolution}
|
|
Wait For Peripheral Reading -100000 ${resolution}
|
|
Wait For Peripheral Reading -200000 ${resolution}
|
|
|
|
# Run for an additional second to allow RESD stream to finish before setting an actual sample to an arbitrary value.
|
|
# Otherwise set sample will be overridden by the one fed from RESD.
|
|
Execute Command emulation RunFor "1"
|
|
|
|
RETURN ${resdPath}
|
|
|
|
Prepare Multi-Frequency Data Test
|
|
# 3 blocks starting one after the other: low-frequency, high-frequency, low-frequency
|
|
${resdArgs}= Catenate SEPARATOR=,
|
|
... "--input", r"${CURDIR}/LIS2DW12-samples_lowfreq1.csv"
|
|
... "--frequency", "100"
|
|
... "--start-time", "0"
|
|
... "--map", "acceleration:x,y,z:x,y,z"
|
|
... "--input", r"${CURDIR}/LIS2DW12-samples_highfreq.csv"
|
|
... "--frequency", "1600"
|
|
... "--start-time", "320000000"
|
|
... "--map", "acceleration:x,y,z:x,y,z"
|
|
... "--input", r"${CURDIR}/LIS2DW12-samples_lowfreq2.csv"
|
|
... "--frequency", "100"
|
|
... "--start-time", "340000000"
|
|
... "--map", "acceleration:x,y,z:x,y,z"
|
|
|
|
${resdPath}= Create RESD File ${resdArgs}
|
|
|
|
Execute Command allowPrivates true
|
|
Execute Command using sysbus
|
|
Execute Command mach create
|
|
Execute Command machine LoadPlatformDescriptionFromString "i2c1: I2C.STM32F7_I2C @ sysbus 0x10000000"
|
|
Execute Command machine LoadPlatformDescriptionFromString "accel: Sensors.LIS2DW12 @ i2c1 0"
|
|
Execute Command logLevel -1 ${ACCEL}
|
|
|
|
# The accelerometer starts at 100 Hz, which we'll call the "low frequency"
|
|
Execute Command ${ACCEL} SampleRate 100
|
|
Execute Command ${ACCEL} FeedAccelerationSamplesFromRESD @${resdPath} type=MultiFrequency
|
|
|
|
RETURN ${resdPath}
|
|
|
|
Acceleration Should Be
|
|
[Arguments] ${major} ${minor}
|
|
|
|
${actual}= Execute Command ${ACCEL} AccelerationX
|
|
${minor}= Evaluate "{:03}".format(${minor})
|
|
# Why 2 separate rstrips? To turn 0.010 into 0.01, but 0.000 into 0 and not ""
|
|
${expected}= Evaluate "${major}.${minor}".rstrip("0").rstrip(".")
|
|
Should Be Equal ${actual.strip()} ${expected}
|
|
|
|
*** Test Cases ***
|
|
LIS2DW12 Should Return Data From RESD In 12-Bit Mode
|
|
${resdPath}= LIS2DW12 Should Return Data From RESD ${ACCEL_POLLING_SAMPLE} 12
|
|
|
|
# Test Teardown must be called from a test teardown as it uses Run Keyword If Test Failed, so
|
|
# we have to repeat this here instead of in LIS2DW12 Should Return Data From RESD
|
|
[Teardown] Test Teardown And Cleanup RESD File ${resdPath}
|
|
|
|
LIS2DW12 Should Return Data From RESD In 14-Bit Mode
|
|
${resdPath}= LIS2DW12 Should Return Data From RESD ${ACCEL_POLLING_SAMPLE_14BIT} 14
|
|
|
|
# Additionally verify the examples from ST AN5038. In the app note the calculated
|
|
# mg values are rounded to integers, these are exact values.
|
|
Wait For Peripheral Reading For Set Value And Known LSBs -40992 14 0xFD60
|
|
Wait For Peripheral Reading For Set Value And Known LSBs 7320 14 0x0078
|
|
Wait For Peripheral Reading For Set Value And Known LSBs 1046028 14 0x42FC
|
|
|
|
[Teardown] Test Teardown And Cleanup RESD File ${resdPath}
|
|
|
|
LIS2DW12 Should Return Multi-Frequency Data - Switch Late
|
|
${resdPath}= Prepare Multi-Frequency Data Test
|
|
|
|
# the full low-frequency block #1
|
|
FOR ${i} IN RANGE 32
|
|
Acceleration Should Be 0 ${i} # the first low-frequency block has values 0, 0.001, ...
|
|
Execute Command emulation RunFor "0.01" # play one low-frequency point
|
|
END
|
|
# 3 more HF sample periods, staying at the low frequency
|
|
FOR ${i} IN RANGE 3
|
|
Acceleration Should Be 0 31 # the last low-frequency sample repeating
|
|
Execute Command emulation RunFor "0.000625" # play one high-frequency point
|
|
END
|
|
Execute Command ${ACCEL} SampleRate 1600
|
|
FOR ${i} IN RANGE 32
|
|
Acceleration Should Be 1 ${i} # the high-frequency block has values 1, 1.001, ...
|
|
Execute Command emulation RunFor "0.000625" # play one high-frequency point
|
|
END
|
|
# 3 more HF sample periods, staying at the high frequency
|
|
FOR ${i} IN RANGE 3
|
|
Acceleration Should Be 1 31 # the last high-frequency sample repeating
|
|
Execute Command emulation RunFor "0.000625" # play one high-frequency point
|
|
END
|
|
Execute Command ${ACCEL} SampleRate 100
|
|
FOR ${i} IN RANGE 32
|
|
Acceleration Should Be 2 ${i} # the second low-frequency block has values 2, 2.001, ...
|
|
Execute Command emulation RunFor "0.01" # play one low-frequency point
|
|
END
|
|
|
|
[Teardown] Test Teardown And Cleanup RESD File ${resdPath}
|
|
|
|
LIS2DW12 Should Return Multi-Frequency Data - Switch Early
|
|
${resdPath}= Prepare Multi-Frequency Data Test
|
|
|
|
# the first 16 samples of low-frequency block #1
|
|
FOR ${i} IN RANGE 16
|
|
Acceleration Should Be 0 ${i} # the first low-frequency block has values 0, 0.001, ...
|
|
Execute Command emulation RunFor "0.01" # play one low-frequency point
|
|
END
|
|
Execute Command ${ACCEL} SampleRate 1600
|
|
# the first 20 samples of the high-frequency block
|
|
FOR ${i} IN RANGE 20
|
|
Acceleration Should Be 1 ${i} # the high-frequency block has values 1, 1.001, ...
|
|
Execute Command emulation RunFor "0.000625" # play one high-frequency point
|
|
END
|
|
Execute Command ${ACCEL} SampleRate 100
|
|
FOR ${i} IN RANGE 32
|
|
Acceleration Should Be 2 ${i} # the second low-frequency block has values 2, 2.001, ...
|
|
Execute Command emulation RunFor "0.01" # play one low-frequency point
|
|
END
|
|
|
|
[Teardown] Test Teardown And Cleanup RESD File ${resdPath}
|