element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Avnet Boards Forums
  • Products
  • Dev Tools
  • Avnet Boards Community
  • Avnet Boards Forums
  • More
  • Cancel
Avnet Boards Forums
MicroZed Hardware Design SPI Self Test Fails
  • Forum
  • Documents
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Avnet Boards Forums to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 11 replies
  • Subscribers 307 subscribers
  • Views 1591 views
  • Users 0 members are here
Related

SPI Self Test Fails

Former Member
Former Member over 10 years ago

I'm having trouble getting the SPI Self Test example to pass. I'm using Vivado 2014.4.


I checked both SPI peripherals in the "MIO Configuration" in Vivado. "ps7_spi_0" and "ps7_spi_1" both show up in system.mss in my BSP in the SDK. The base address for both peripherals is correct in "xparameters.h".


I imported the Xilinx example project "xspips_selftest_example" and ran it both for device ID 0 and 1 (SPI 0 and SPI 1) and both failed. The part it fails at is in the "int XSpiPs_SelfTest(XSpiPs *InstancePtr)" function it calls the "XSpiPs_Reset" function and then checks that the SPI registers are in their default state, which they are not which causes the test to fail.


Does anyone know where I can dig to find out why this test might be failing? Or maybe the test is out of date and shouldn't actually work in the first place? Thanks!


edit: To get into more detail of why the test is failing: The driver performs a reset on the SPI peripheral and then reads back the register value to see if it gets an expected value in the "Config_reg" register. The expected value is 0x00020000, but it actually reads back 0x00000000 which causes it to fail this test. I looked at the register value in Eclipse and it is indeed 0x00000000. I tried manually changing the register value and it has no effect, even though many of the bits are read/write according to the Technincal Reference Manual.

  • Sign in to reply
  • Cancel
  • Former Member
    0 Former Member over 10 years ago

    You might want to look at which MIO signals you assigned to your PS SPI ports. While the MIO assignments for SPI 1 include the MIO pin that go to the MicroZed PS PMOD port the only MIO assignments that work for SPI 0 are also used by the default Ethernet or USB ports which are already connected to those peripherals on the MicroZed.

     

    I built a quick Vivado 2014.4 project for the MicroZed and assigned SPI 1 to MIO connected to the PMOD port and assigned SPI 0 to EMIO. I then exported the design to SDK. There I used the 'New Application' > 'Peripheral Test' template to generate a test program. The C code supplied here also uses the XSpiPS_SelfTest function and passed with no issues when I ran the test application. You might what to use this approach and look at how this example code calls the self test functions.

     

    -Gary

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago in reply to Former Member

    Hi Gary,

    I tried starting a new project with no other components on the board except the ZYNQ7 Processing System. I ran design automation which connected the fixed IO and the DDR. Then I started a C project and used the "Peripheral Test" template as you suggested.

    All of the tests passed except for the SPI test. I'll post the results below:

    ---Entering main---

    Running ScuGicSelfTestExample() for ps7_scugic_0...
    ScuGicSelfTestExample PASSED
    ScuGic Interrupt Setup PASSED

    Running XDmaPs_Example_W_Intr() for ps7_dma_s...
    Test round 0
    XDmaPs_Example_W_Intr PASSED

    Running QspiSelfTestExample() for ps7_qspi_0...
    QspiPsSelfTestExample PASSED

    Running DcfgSelfTestExample() for ps7_dev_cfg_0...
    DcfgSelfTestExample PASSED

    Running ScuTimerPolledExample() for ps7_scutimer_0...
    ScuTimerPolledExample PASSED

    Running Interrupt Test  for ps7_scutimer_0...
    ScuTimerIntrExample PASSED

    Running Interrupt Test  for ps7_scuwdt_0...
    ScuWdtIntrExample PASSED

    Running SpiPsSelfTestExample() for ps7_spi_1...
    SpiPsSelfTestExample FAILED
    ---Exiting main---

    I'm using SPI1 on MIO pins 10, 11 and 12 with ss[0] set to MIO13. I'm not sure how to post images on this forum or I could add a screenshot.

    Thanks for the suggestion, I'm just not sure why it isn't working for me. Is there any way you could post your project so that I could open it and try running it?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago in reply to Former Member

    In my project I selected the MicroZed 7020 board and used the MicroZed Board Definition Files available here:

    http://zedboard.org/support/documentation/1519

     

    When I added the Zynq PS System and ran the 'Automation' I did leave the 'use board presets' checked. I left all of the peripherals selected by the preset enabled (including Ethernet) and added PS SPI 0 and PS SPI 1. I selected MIO 10...15 for SPI 1 as you did. Then I generated a bitstream and exported the design to SDK.

     

    Given that I do not see the Interrupt Test for ps7_ethernet in your test results I suspect that you did not use the same board definition files. I would install the Avnet MicroZed board definition files and select the MicroZed board (7010 or 7020) and then generate your design. I would use the board presets and then just delete any peripherals you do not want.

     

    -Gary

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago

    I had been using those same Board Definition files in my last project (though I have the 7010 Microzed board instead of the 7020), I had just unchecked the Ethernet to make room for SPI0.

    I started a brand new project, re-downloaded the board files and changed nothing except enabling SPI1 on the PMOD header. I also left the "board presets" box checked during setup. I got the same result (SPI1 test failed). The Ethernet was left included in this project and that test also passed.

    I wanted to see if this is affecting all peripherals or just the SPI so I also added an I2C peripheral and that test passed.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago

    That is puzzling. I built a new project targeting a MicroZed 7010, again using the Avnet Board Definition files (not the 'stock' Vivado MicroZed board definition), accepted the board presets. Then I removed the Ethernet and added PS SPI 1 using MIO 10...15 and build the design and exported to SDK. Built a new Test Peripherals application and ran - all passed OK, including the SPI 1.

     

    Not sure what the difference could be unless you have not installed and used the Avnet Board Definition files.

     

    -Gary

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Hi sryan,

    Did you ever resolve this issue? I am running into the same problem. SPI0 and SPI1 both fail the self test while all other peripherals pass.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    I have the same issue here.

    I'm running the FPGA in AMP mode, CPU0 linux, CPU1 bare metal.

    Anyone already got around this?

    Thanks
    GI

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Hi,

    just got around this, it seems that the linux is not turning on the peripheral's clocks at bootup.
    here the code to make it work:

    APER_CLK_CTRL |= (1<<14) | (1<<15);
    SPI_CLK_CTRL = 0x00000503; //Spi clock divider set to 5, SPI1 & 0 clock enable

    After this, the SPI0/1 are passing the self-test and the SPI instances are working.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Hi,

    I am using Microzed Vision Carrier board to build a design with SPI to control external DAC. I routed SPI1 to PMOD J5 with MIO10..15, SPI0 to PMOD JD and 1 PL axi_quad_spi to PMOD JC. I run thru the Peripheral test in SDK, all passed but there is no SPI clock or MOSI on J5, JC or JD port when probe using oscilloscope. When add the external SPI signal to signal probe, all are unknown

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Hi,

    How to submit a case and send you the design file to investigate?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube