blob: a66b7ce398a8cc3a95e38729c826330104138e3b [file] [log] [blame]
*** Variables ***
${SPI_FLASH}= SEPARATOR=
... """ ${\n}
... spiFlashMemory: Memory.MappedMemory ${\n}
... ${SPACE*4}size: 0x100000 ${\n}
... ${\n}
... spiFlash: SPI.Micron_MT25Q @ spi2 ${\n}
... ${SPACE*4}underlyingMemory: spiFlashMemory ${\n}
... ${\n}
... gpioPortB: ${\n}
... ${SPACE*4}12 -> spiFlash@0 ${\n}
... """
*** Keywords ***
Check Zephyr Version
Wait For Prompt On Uart $
Write Line To Uart version
Wait For Line On Uart Zephyr version 2.6.99
Should Be Equal Within Range
[Arguments] ${value0} ${value1} ${range}
${diff}= Evaluate abs(${value0} - ${value1})
Should Be True ${diff} <= ${range}
Set PWM And Check Duty
[Arguments] ${pwm} ${channel} ${period} ${pulse} ${expected_duty}
Write Line To Uart pwm cycles ${pwm} ${channel} ${period} ${pulse}
Execute Command gpioPortB.pt Reset
Execute Command pause
Execute Command emulation RunFor "5"
# Go back to continuous running so the next iteration can run UART commands
Start Emulation
${hp}= Execute Command gpioPortB.pt HighPercentage
${hpn}= Convert To Number ${hp}
Should Be Equal Within Range ${expected_duty} ${hpn} 10
Run Command
[Arguments] ${command}
Write Line To Uart ${command}
Wait For Prompt On Uart $
Flash Should Contain
[Arguments] ${address} ${value}
${res}= Execute Command flash ReadDoubleWord ${address}
Should Be Equal As Numbers ${res} ${value}
*** Test Cases ***
Should Handle Version Command In Zephyr Shell
Execute Command include @scripts/single-node/stm32l072.resc
Create Terminal Tester sysbus.usart2
Start Emulation
Check Zephyr Version
Should Handle Version Command In Zephyr Shell On Lpuart
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/bl072z_lrwan1--zephyr-shell_module_lpuart.elf-s_1197384-aea9caa07fddc35583bd09cb47563a11a2f90935
Create Terminal Tester sysbus.lpuart1
Start Emulation
Check Zephyr Version
Should Handle DMA Memory To Memory Transfer
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-chan_blen_transfer.elf-s_669628-623c4f2b14cad8e52db12d8b1b46effd1a89b644
# The test takes 8 seconds virtual time
Create Terminal Tester sysbus.usart2 timeout=10
Wait For Line On Uart PASS - [dma_m2m.test_dma_m2m_chan0_burst16]
Wait For Line On Uart PASS - [dma_m2m.test_dma_m2m_chan0_burst8]
Wait For Line On Uart PASS - [dma_m2m.test_dma_m2m_chan1_burst16]
Wait For Line On Uart PASS - [dma_m2m.test_dma_m2m_chan1_burst8]
Should Handle DMA Memory To Memory Loop Transfer
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-loop_transfer.elf-s_692948-f182b72146a77daeb4b73ece0aff2498aeaa5876
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart PASS - [dma_m2m_loop.test_dma_m2m_loop]
Wait For Line On Uart PASS - [dma_m2m_loop.test_dma_m2m_loop_suspend_resume]
Independent Watchdog Should Trigger Reset
# We can't use stm32l072.resc in this test because it defines a reset macro
# that loads a Zephyr ELF which gets triggered by the watchdog reset. This
# would obviously make the test fail because it would suddenly start running
# a different Zephyr application, but even if it reloaded the same ELF the
# test would still fail because `m_state` would be reset. We manually define
# a reset macro that only resets PC and SP to their initial values.
Execute Command mach create
Execute Command using sysbus
Execute Command machine LoadPlatformDescription @platforms/cpus/stm32l072.repl
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/zephyr-drivers_watchdog_wdt_basic_api-test.elf-s_463344-248e7e6eb8a681a33c4bf8fdb45c6bf95bcb57fd
${pc}= Execute Command sysbus GetSymbolAddress "z_arm_reset"
${sp}= Execute Command sysbus GetSymbolAddress "z_idle_stacks"
Execute Command macro reset "cpu PC ${pc}; cpu SP ${sp}"
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
PWM Should Support GPIO Output
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-custom_shell_pwm.elf-s_884872-f36f63ef9435aaf89f37922d3c78428c52be1320
# create a PWM analyzer and connect gpiob.10 to it
Execute Command machine LoadPlatformDescriptionFromString "pt: PWMTester @ gpioPortB 10"
Execute Command machine LoadPlatformDescriptionFromString "gpioPortB: { 10 -> pt@0 }"
Create Terminal Tester sysbus.usart2
Start Emulation
${pwm}= Wait For Line On Uart pwm device: (\\w+) treatAsRegex=true
${pwm}= Set Variable ${pwm.groups[0]}
# The expected percentage in each test is approximately duty/period
# pwm ch period duty expected %
Set PWM And Check Duty ${pwm} 3 256 5 0
Set PWM And Check Duty ${pwm} 3 256 85 33
Set PWM And Check Duty ${pwm} 3 256 127 50
Set PWM And Check Duty ${pwm} 3 256 250 100
Should Handle Flash Operations
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-flash_shell.elf-s_1199160-dad825e98576f82198b759a75e5d0aeafcb00443
Create Terminal Tester sysbus.usart2
Start Emulation
# Page 1504 (0x0002f000) and the surrounding area is empty so we can use it
Flash Should Contain 0x0002f000 0x00000000
Run Command flash write 0x0002f000 0x11 0x22 0x33 0x44
Flash Should Contain 0x0002f000 0x44332211
Run Command flash page_erase 1504
Flash Should Contain 0x0002f000 0x00000000
# Pages are 128 bytes long, so this pattern will cover 3 pages
Run Command flash write_pattern 0x0002f000 384
Flash Should Contain 0x0002f020 0x23222120
Flash Should Contain 0x0002f0a0 0xa3a2a1a0
Flash Should Contain 0x0002f120 0x23222120
# Erasing a page should set the whole page to 0 but not affect adjacent pages
Run Command flash page_erase 1505
Flash Should Contain 0x0002f020 0x23222120
# Check the first word of the page, a word within it and the last word of the page
Flash Should Contain 0x0002f080 0x00000000
Flash Should Contain 0x0002f0a0 0x00000000
Flash Should Contain 0x0002f0fc 0x00000000
Flash Should Contain 0x0002f120 0x23222120
Should Handle EEPROM Operations
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-eeprom.elf-s_526436-c574c036e4003e7b79923c7a3076809baa645826
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart PASS - test_size
Wait For Line On Uart PASS - test_out_of_bounds
Wait For Line On Uart PASS - test_write_rewrite
Wait For Line On Uart PASS - test_write_at_fixed_address
Wait For Line On Uart PASS - test_write_byte
Wait For Line On Uart PASS - test_write_at_increasing_address
Wait For Line On Uart PASS - test_zero_length_write
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
RTC Should Support Alarms
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-alarm.elf-s_457324-fab62a573e2ce5b6cad2dfccfd6931021319cadc
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart Set alarm in 2 sec (2 ticks)
Wait For Line On Uart !!! Alarm !!!
# This output seems off by one but it is correct
# See https://github.com/zephyrproject-rtos/zephyr/commit/55594306544cddb5077923758485503fd723d2ae
# and https://github.com/zephyrproject-rtos/zephyr/commit/507ebecffc325c2234419907884b3164950056d2
Wait For Line On Uart Now: 3
RTC Should Support Wakeup
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-custom_rtc_wakeup.elf-s_430288-709ea60e0de053b3d693718d80fd3afb9e090221
Create Terminal Tester sysbus.usart2
Start Emulation
# This sample configures the RTC wakeup in 4 different ways, one after another:
# - prescaler /2, autoreload 410
# - prescaler /16, autoreload 410
# - prescaler /16, autoreload 10
# - 1Hz clock, autoreload 1
# and expects the correct time to pass before the next time the wakeup callback
# is triggered after each configuration. The wakeup callback prints the time
# since the previous call in milliseconds.
# The autoreload value of 410 comes from 25 ms * (32768 Hz / 2) = 409.6
Wait For Line On Uart RTC configured, waiting for wakeup interrupt
Wait For Line On Uart RTC wakeup callback triggered, wakeup flag is set, ticks=25
Wait For Line On Uart RTC wakeup callback triggered, wakeup flag is set, ticks=200
Wait For Line On Uart RTC wakeup callback triggered, wakeup flag is set, ticks=5
Wait For Line On Uart RTC wakeup callback triggered, wakeup flag is set, ticks=1000
Should Run Philosophers Demo On LpTimer
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-philosophers_lptimer.elf-s_579864-a8786745129b9aa4431c85138c0dcc65bd0543e4
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart Philosopher 5.*THINKING treatAsRegex=true
Wait For Line On Uart Philosopher 5.*HOLDING treatAsRegex=true
Wait For Line On Uart Philosopher 5.*EATING treatAsRegex=true
SPI Should Work In Interrupt-Driven Mode
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command machine LoadPlatformDescriptionFromString ${SPI_FLASH}
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-spi_flash.elf-s_540832-09b987ec67ea619d0330963ef9d35ab561d04430
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart Flash erase succeeded!
Wait For Line On Uart Data read matches data written. Good!!
PVD Should Fire Interrupt
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1-zephyr-custom_pwr_pvd.elf-s_871128-6822cb7346d2171c2b170b74701144d59b36199c
Create Terminal Tester sysbus.usart2
Start Emulation
Run Command pvd configure 3.1 rising
Execute Command pwr Voltage 2.9
Wait For Line On Uart PVD callback triggered, PVDO is set
DMA Transfer Should Write To UART
Execute Command $bin = @https://dl.antmicro.com/projects/renode/b_l072z_lrwan1--zephyr-custom_dma_hello_world.elf-s_591108-c4351f75c230563f429aadffb53f294fa7738406
Execute Command include @scripts/single-node/stm32l072.resc
Create Terminal Tester sysbus.usart2
Start Emulation
Wait For Line On Uart Hello world from DMA!
DMA Transfer Should Write To And Read From UART
Execute Command $bin = @https://dl.antmicro.com/projects/renode/stm32l073--cubemx-USART_Communication_TxRx_DMA.elf-s_179016-cae1f7f14ab8ddb7db17cc1e8a8ee2826bc0da81
Execute Command include @scripts/single-node/stm32l072.resc
Execute Command machine LoadPlatformDescriptionFromString "gpioPortA: { 5 -> led@0 }; led: Miscellaneous.LED @ gpioPortA 5"
Execute Command machine LoadPlatformDescriptionFromString "button: Miscellaneous.Button @ gpioPortC 13 { invert: true; -> gpioPortC@13 }"
Execute Command machine LoadPlatformDescriptionFromString "usart2: { ReceiveDmaRequest -> dma1@6 }"
Create Terminal Tester sysbus.usart2
Create LED Tester sysbus.gpioPortA.led defaultTimeout=2
Assert LED State true pauseEmulation=true
Execute Command gpioPortC.button Press
Assert LED State false pauseEmulation=true
Wait For Line On Uart STM32L0xx USART LL API Example : TX/RX in DMA mode pauseEmulation=true
Wait For Line On Uart Configuration UART 115200 bps, 8 data bit/1 stop bit/No parity/No HW flow control pauseEmulation=true
Wait For Line On Uart Please enter 'END' string ... pauseEmulation=true
Write Line To Uart END waitForEcho=false
Assert And Hold LED State true timeoutAssert=0.1 timeoutHold=2