| *** 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 |