<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/17701/how-to-identifier-nrf51-soc-chip</link><description>I try use the FICR information to identifier nRF51. but found some interesting staff when i read 0x10000000 first 16 bytes by SWD memory read.
when I power on read. it return all 0x00.
but i restart SWD debuger read again. it will return 0xAA 0x55 0xAA</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 15 Nov 2016 09:45:26 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/17701/how-to-identifier-nrf51-soc-chip" /><item><title>RE: How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/thread/68100?ContentTypeID=1</link><pubDate>Tue, 15 Nov 2016 09:45:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:58aad19c-89d1-4e25-91f2-e04fd2b05aee</guid><dc:creator>David Garc&amp;#237;a Polo</dc:creator><description>&lt;p&gt;Reading FICR area is the same as reading any flash on the device. Flash should be available when the SWD resources are available. Are you certain you actually read 0x0 and you do not get anything back in your SWD operation and then it is interpreted as a 0x0 instead? also, FICR is actually flash, so it does not change value.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/thread/68099?ContentTypeID=1</link><pubDate>Tue, 15 Nov 2016 09:34:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fb0f8fa1-5eea-46d1-a555-524726572edd</guid><dc:creator>wen jin zhang</dc:creator><description>&lt;p&gt;what is right sequence access the FICR? i check again. use swd_read_word(0x10000000, &amp;amp;tmp) function. and it return OK. but tmp value is 0x00000000 when power on. then no power off. then entry debug mode and read again. the tmp will be 0x55AA55AA.&lt;/p&gt;
&lt;p&gt;The SWD init sequence is ok!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/thread/68098?ContentTypeID=1</link><pubDate>Tue, 15 Nov 2016 09:30:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f9447d8d-8502-4c89-8bb6-0163d46a6445</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;Hi vjzhang,&lt;/p&gt;
&lt;p&gt;I am not sure how you are entering debug mode. I can see your function calls but i cannot see what they are doing. The quote from specs says that you need the below&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Debug interface mode is initiated by
clocking one clock cycle on SWDCLK
with SWDIO=1. Due to delays caused by
starting up the DAP&amp;#39;s power domain, a
minimum of 150 clock cycles must be
clocked at a speed of minimum 125 kHz
on SWDCLK with SWDIO=1 to guarantee
that the DAP is able to capture a
minimum of 50 clock cycles.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I do not see where you are doing this.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/thread/68101?ContentTypeID=1</link><pubDate>Tue, 15 Nov 2016 00:27:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5a49305a-fa4b-4760-a535-a3e45f56b836</guid><dc:creator>wen jin zhang</dc:creator><description>&lt;p&gt;I using SWD to read FICR.  first use these code setup and enter SWD debug mode.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    swd_init();

    //add Reset Pin
    swd_set_target_reset(1);
    os_dly_wait(1);
    swd_set_target_reset(0);
    //need wait 500us
    for( i = 0; i &amp;lt; 1200; i++) {}

   //init SWD sequence and get IDcode
    if (!swd_reset()) {
        return Target_UNKNOWN;
    }
    if (!swd_switch(0xE79E)) {
        return Target_UNKNOWN;
    }
    if (!swd_reset()) {
        return Target_UNKNOWN;
    }
    if (!swd_read_idcode(&amp;amp;tmpid)) {
        return Target_UNKNOWN;
    }

    if (!swd_write_dp(DP_ABORT, STKCMPCLR | STKERRCLR | WDERRCLR | ORUNERRCLR)) {
        return Target_UNKNOWN;
    }

    // Ensure CTRL/STAT register selected in DPBANKSEL
    if (!swd_write_dp(DP_SELECT, 0)) {
        return Target_UNKNOWN;
    }

    // Power up
    if (!swd_write_dp(DP_CTRL_STAT, CSYSPWRUPREQ | CDBGPWRUPREQ)) {
        return Target_UNKNOWN;
    }

    do {
        if (!swd_read_dp(DP_CTRL_STAT, &amp;amp;tmp)) {
            return Target_UNKNOWN;
        }
    } while ((tmp &amp;amp; (CDBGPWRUPACK | CSYSPWRUPACK)) != (CDBGPWRUPACK | CSYSPWRUPACK));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then read FICR use swd_read_memory().&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to identifier nRF51 SoC chip?</title><link>https://devzone.nordicsemi.com/thread/68097?ContentTypeID=1</link><pubDate>Mon, 14 Nov 2016 08:39:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c0ade534-1c2a-4001-87b4-e6cd9b06415a</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;Not sure why you were reading 0x00&amp;#39;s but the FICR is permanent device and calibration data tuned for each chip, it will/should not change.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>