The revision D zedboard has an issue with the EMIO.
Configure a single PS unit (zed default setting) and connect GPIO through EMIO (1-bit) to the LEDs on the board (LED0 or any others), use the following software to control the GPIO to turn the LED on/off:
///////////////////////////
t XGpioPs Gpio;
t XGpioPs_Config*GpioConfigPtr;
t int xStatus;
t GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
t if(GpioConfigPtr == NULL)
t return XST_FAILURE;
t xStatus=XGpioPs_CfgInitialize(&Gpio,
t GpioConfigPtr,
t GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED
r");
ttXGpioPs_SetDirectionPin(&Gpio, 54, 1); // the number of the first EMIO is 54
ttXGpioPs_SetOutputEnablePin(&Gpio, 54, 1);
ttXGpioPs_WritePin(&Gpio, 54, 1);
//////////////////////////////////
On revision D board, it does not work, but on revision C board, it works.
So the problem is that you can not use any PS interfaces, such as SPI, SDIO, "directly" through EMIO to control peripherals devices. We have try SPI (not the QSPI through axi interface) and the SDIO.
We also found an strange way to solve this problem: add an AXI-based IP in the project, such as an AXI-GPIO in the PL part, then you can use the PS interfaces (not the AXI-based) through the EMIO now.
We have try severl boards and it turns out that it is the board version that make this strange issue.
Hope anyone can give an answer ?