SLAZ328AC October   2012  – September 2021 MSP430F6630

 

  1.   1
  2.   2
  3.   3
  4.   4
  5.   5
    1.     6
    2.     7
      1.      8
      2.      9
    3.     10
  6.   11
    1.     12
    2.     13
    3.     14
    4.     15
    5.     16
    6.     17
    7.     18
    8.     19
    9.     20
    10.     21
    11.     22
    12.     23
    13.     24
    14.     25
    15.     26
    16.     27
    17.     28
    18.     29
    19.     30
    20.     31
    21.     32
    22.     33
    23.     34
    24.     35
    25.     36
    26.     37
    27.     38
    28.     39
    29.     40
    30.     41
    31.     42
    32.     43
    33.     44
    34.     45
    35.     46
    36.     47
    37.     48
    38.     49
    39.     50
    40.     51
    41.     52
    42.     53
    43.     54
    44.     55
    45.     56
    46.     57
    47.     58
    48.     59
    49.     60
    50.     61
    51.     62
    52.     63
  7.   64

SYS18

USB Module

Category

Functional

Function

USB registers are unlocked and ACCVIFG is set at start-up

Description

During device start-up, an incorrect line of code in the start-up code causes the USB registers to remain unlocked and causes an access violation, setting ACCVIFG bit.
In the  BSL430_Low_Level_Init code, the following line of code accesses USBKEY (incorrect register address) instead of USBKEYPID, causing an access violation setting ACCVIFG bit, and leaving the USB registers unlocked.
mov.w   #0x0000,   &USBKEY     ; lock USB

The correct line of code should read:
mov.w   #0x0000,   &USBKEYPID     ; lock USB correctly

Note: This code does not run when using the JTAG debugger - the behavior only appears when running standalone.

Workaround

1. Load the latest version of the USB BSL from Custom BSL Download

OR

2. Load a non-USB or custom BSL

OR

3. Erase the BSL

OR

4. Clear the access violation flag at the beginning of the application code with the following C code (or its assembly equivalent):


USBKEYPID = 0;       // Lock USB correctly
FCTL3 = 0xA558;      // Clear violation flag