mwip kernel module on Zynq 7000 series and AD 9361

6 views (last 30 days)
Hello, one of my colleagues uses Simulink to create an elf file that interfaces with the Zynq 7000 series and AD9361 for RF transmit / receive application. However it always resets the transmit frequency to 2.44 ghz to calibrate which is problematic for us, and I am trying to look for the IOCTL that is being called from AD9361 kernel module (thru printk/debugfs etc), But I dont see them, I only see mwipcore traces like "mwipcore 43c20000.mwbypasstx: [MMAP] size:10000 pgoff: 0 when that elf file is launched.
Question: how does the elf file interact with the 9361 device thru mwipcore? Is it thru memap interface that mwipcore opens? I know the AD 9361 IIO devices are controlled via sysfs and sysfs uses SPI to fetch/set registers, thru the 9361 kernel module. But I am not sure if the matlab application is going thru that path. The reference platform is from Matlab/AD and I create the kernel/ram disk image thru buildroot from Matlabs repo. Also why would the 9361 transmit block on simulink not honor the tx frequency thats passed along to initialize it , it always calibrates using 2.44 ghz? Is something hard coded? Thanks

Answers (1)

Neil MacEwen
Neil MacEwen on 15 Mar 2022
Hi Ratin,
mwipcore doesn't interact with the AD9361 at all, it is used to configure the user IPCore that has been built into the FPGA bitstream by the targeting workflow. IT's basically for AXI-lite read and writes. mwbypasstx is a custom core that we include on the bitstream to allow bypassing of any custom IP core in the case when a user is doing streaming to the host.
The calibration that you see on startup is probably the calibration of the LVDS digital interface clocking between the FPGA and the AD9361, so the center frequency should have no bearing on that process. Is that the calibration you are referring to? What are you seeing that tells you the center frequency is changing?
We're looking to see if anything in our code that may change the center frequency, but we can't see anything as yet. MATLAB code calls directly into the AD9361 IIO driver, so you may be able to find a clue in there.
Thanks,
Neil
  2 Comments
Ratin Rahman
Ratin Rahman on 17 Mar 2022
Edited: Ratin Rahman on 17 Mar 2022
Hi Neil, Thanks for your reply. Before running the app created with Simulink:
cat /sys/bus/iio/devices/iio:device0/out_altvoltage1_TX_LO_frequency
915000000
Then I run the program, which reads some values from an init file, including the transmit frequency. Which is somewhere in the 2.1 Ghz range and its a double value. This gets passed in to AD936x Transmitter block (labled txFreq below).
Trace:
--- Initial Radio Configuration (from tmp init.dat ---
--- Current AXI4-Lite Input ---
-----------------------------
--- Initial Radio Configuration (from tmp init.dat ---
::::::::::::::::::::::::::::::::::::
The application simply initialized AD936x Transmitter block at this point, the data has not pushed yet. The enable happens after 10 interation, 1 msec timeslot, so after 10 millisecond.
Then at this point I let it go idle and cat the TX_Lo again and I get 2.4Ghz
$ cat /sys/bus/iio/devices/iio:device0/out_altvoltage1_TX_LO_frequency
2400000000
There is a waveform that shows up on the spectrum analyzer as well during calibration, and looks to be a calibration sequence.
Ratin Rahman
Ratin Rahman on 22 Mar 2022
Bump - could it be doing BIST? I saw this
define BIST_ENABLE (1 << 0) /* BIST Enable */
In the driver.

Sign in to comment.

Categories

Find more on Multicore Processor Targets in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!