To download NI software, including the products shown below, visit ni.com/downloads.
The MIPI RFFE API for PXIe-657x Digital Pattern Instrument is a lightweight abstraction of the MIPI RFFE v2.0 protocol geared toward flexiblity and programmatic control of RFFE register reads and writes in LabVIEW. The API is not optimized for test time performance, but geared towards characterization, lab, and debug, where the flexibility of creating dynamic RFFE commands on the fly is ideal.
NOTE: This API is open source and is not fully tested. Users of the API are liable to make corrections or edits to the API for any and all issues identified. Feel free to post a comment with a description of the issue found, and it will be reviewed and potentially updated on this page.
The below block diagram indicates the digital subsystem that is being implemented by the API. The digital clock, data, and power supply are all controlled via digital lines in the project.
Block Diagram of a typical RFFE DUT test setup
For voltage levels, all default levels are 0V to 1.8V with a 0.9V threshold for reading high/low digital logic.
For timing, 1 MHz is the default vector rate for RFFE communication, and is stable for both reads and writes. There are more details which may be used to help ensure you have accurate and successful RFFE reads and writes:
The LabVIEW project is organized in the following manner:
In the Examples folder, you will find the following front panels. Below is a description of their functionality and intended use.
MIPI RFFE Command Panel.vi
This example uses a while loop with event structure to loop indefinitely until the user stops the program. The program is intended to execute one RFFE command call at a time based upon the user selecting "Execute Command". The RFFE command and Register Data controls can be modified dynamically and bursted at any time the program is running.
Command Panel v1.0.1
MIPI RFFE Multi-Command Panel.vi
This example shows one example of creating a VI from the API to create a new function that allows for multiple register reads or writes to occur programmatically. This example simply allows multiple extended register writes and/or multiple extended register reads. Note: A future example can be added if there is a desire to have various RFFE commands to execute in a sequence through an API call.
Multi-Command Panel v1.0.1
A summary of the API can be found below, along with recommendations on using the API:
Image of initialization for the digital pattern instrument and the MIPI RFFE API
To initialize the API, the NI-Digital driver is used along with a digital pattern instrument project (.digiproj). The VI's are organized to make corresponding functions logical to the end user.
Optional user change to insert a bring up pattern before running the panel with a DUT
An optional step in the command panel block diagram is to enable a code subset which allows a user to define a pattern to burst before the command panel begins. This is useful when working with DUTs that require a specific sequence of register writes before it is operational.
To select your command programmatically, there is a Burst RFFE Command VI that allows you to do so.
Allows users to programmatically choose the command and burst the pattern
Finally, for programmatically bursting a sequence of register commands, there is a Multi-Command VI that allows you to perform multiple extended register reads or writes. This can be modified if the types of commands need to change in the sequence. Note: please leave a comment for feedback on the types of register sequence burst commands needed and it can be considered for addition in future API revisions.
Allows a user to input an array of register writes and reads for bursting. The order of the bursts will be all extended register writes first, followed by all the extended register reads.
LabVIEW 17.0 and NI-Digital 17.0 or greater
PXIe-657x (6570, 6571) or equivalent product
MIPI RF Front-End Interface (RFFE) from mipi.org
MIPI RFFE Communication for RF Semiconductor Devices from ni.com
Example code from the Example Code Exchange in the NI Community is licensed with the MIT license.
This API is pretty useful. I have gotten to know Kyle and work with him on this to test and use. I just integrated it into a first test project that I delivered and it works great. Kuddos to Kyle and NI for bringing this to the table.
Hi,Kyle_A:
Can this APIs could be used in MIPI RFFE v1.10?
Is this API compatible with v1.10
Thanks!
Hi Kyle_A
I am not hardware nor MIPI expert and would like to ask something about MIPI RFFE spec and SDATA pin level setting.
Your example set SDATA pin termination mode to "active load" with Vcom=0V and Iol 1.5mA, Ioh -1.5mA.
Also you wrote "This represents how the RFFE specification expects the data line when not being driven."
I checked the spec. In pin physical I/O chapter, it mentions "SDATA and SCLK pull-downs may be implemented as internal or external components or current sources." Does this reflect your SDATA pin setting? If not, would you please tell more about the reason behind this termination mode setting.
Thank you
Hi Vincent,
The main reason I added active load here is to give a small assist for receiving data from the RFFE DUT which is typically a weak driver based on the MIPI RFFE spec. It is not necessary and can be removed if it is causing worse performance in your specific application use case. I found in some cases the active load termination can improve edge performance based on the speed and loading conditions of the system setup. I have been considering removing this from the API as default since it technically does not belong based on the spec. However, an additional 1.5 mA of drive strength does not cause too great of a change to the overall communication signal integrity, whether needed or not. Hope this helps explain.
Hi Kyle,
This is a pretty good 🙂
Hi Kyle,
Can the MIPI REEF API be used in c# to communicate with PXIe-657x ?