{"id":264,"date":"2018-10-20T22:05:28","date_gmt":"2018-10-20T21:05:28","guid":{"rendered":"https:\/\/ca.rstenpresser.de\/blag\/?p=264"},"modified":"2018-10-20T22:05:28","modified_gmt":"2018-10-20T21:05:28","slug":"rant-why-atmel-start-sucks","status":"publish","type":"post","link":"https:\/\/ca.rstenpresser.de\/blag\/2018\/10\/rant-why-atmel-start-sucks\/","title":{"rendered":"Rant: Why &#8220;Atmel START&#8221; sucks"},"content":{"rendered":"<p>Recently I had to work with Atmel START. The basic idea looks promising, a nice GUI to configure the peripherals of your chip so you can start with the actual project faster.<br \/>\nBut there are way to many downsides.<\/p>\n<h3>It requires a Internet connection<\/h3>\n<p>I don&#8217;t really understand the whole Idea behind the architecture. It looks like the GUI generates a json which is then send to the Atmel backend that is somewhere on AWS. An archive with source code is generated, downloaded extraced and integrated into the Atmel Studio Project.<br \/>\nThere is no offline Workflow. If you want to reconfigure something, you need a internet connection.<\/p>\n<h3>Bullshit error Messages<\/h3>\n<p>Look for yourself. This is what I got the 2nd time I tried to update a Project. Funny enough, just doing it again made the error go away. Quality software, yay!<br \/>\nThere is also the case that the Backend does an Error 500. I have seen this several times, it seems to be triggered by entering weird values into the GUI fields. Like 10Ghz Clock frequency or so.<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/error.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-267\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/error.jpg\" alt=\"\" width=\"619\" height=\"380\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/error.jpg 619w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/error-300x184.jpg 300w\" sizes=\"(max-width: 619px) 100vw, 619px\" \/><\/a><\/p>\n<h3>\nIt is slow as hell<\/h3>\n<p>Changing one checkbox takes about two minutes. The loading time of the GUI is already a minute, then the GUI scrolls really slow and is unresponsive. After doing the change, it takes ~20sec until I am back in Atmel Studio and can hit compile.<br \/>\nBy now, I have learned to change the C headers directly. But that means also extra work when I want to add another module via START since I need to manually merge the differences between my local files and the generated ones.<\/p>\n<h3>The GUI has usability issues<\/h3>\n<p>Labes are cut off and are not visible. Why would the Framework set the same Userlabel as the Pin name. If its the same, its redundant.<br \/>\nThe Screenspace is not well used. Resizing windows is a PITA because its so slow.<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-273\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen-1024x639.jpg\" alt=\"\" width=\"660\" height=\"412\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen-1024x639.jpg 1024w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen-300x187.jpg 300w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen-768x479.jpg 768w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/use_full_screen.jpg 1922w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-272\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels-1024x547.jpg\" alt=\"\" width=\"660\" height=\"353\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels-1024x547.jpg 1024w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels-300x160.jpg 300w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels-768x411.jpg 768w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usefull-labels.jpg 1214w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<h3>GUI fields description<\/h3>\n<p>Here are two prime examples. Why does anyone include a description like this. I can tell this by reading the field name. How about &#8220;Checking this box will change the way the divider is calculated. Unchecked means divide by N-1, checked divide by 2^n-1&#8221;.<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-265\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips-1024x566.jpg\" alt=\"\" width=\"660\" height=\"365\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips-1024x566.jpg 1024w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips-300x166.jpg 300w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips-768x425.jpg 768w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/best-tooltips.jpg 1186w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<h3>GUI fields functions<\/h3>\n<p>The clock divider for DPLL XOSC input does not work inside Atmel START. So all the other modules assume a wrong clock frequency. However, the chip does behave as predicted.<\/p>\n<p>There is also no hint that this divider only applies to XOSC, but not for the GCLK input.<\/p>\n<p>To make tings worse, there is a field called &#8220;Reference Clock Source&#8221; and one called &#8220;Reference Clock Selection&#8221;. Really? It doesn&#8217;t even make sense after looking into the data sheet.<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/divider_only_for_xtal.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-266\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/divider_only_for_xtal.jpg\" alt=\"\" width=\"556\" height=\"484\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/divider_only_for_xtal.jpg 556w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/divider_only_for_xtal-300x261.jpg 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/a><\/p>\n<h3>GUI fields function, again<\/h3>\n<p>If there is a checkbox, that disables a function, also disable all the related fields so its obvious to the user that they have no function.<\/p>\n<p>This feature is implemented for most modules, but is missing for the USB Configuration. So the user has no visual hint why the USB descriptors are not working.<\/p>\n<h3>Clock Configuration<\/h3>\n<p>This is actually pretty nice, to have a schematic on clock distribution. Good start. Next, please add the respective frequency of each clock on its configuration page. The values are already calculated, I can see them in the clock selection dropdown of the usb module. Why not just display the frequency on the GCLK or OSCCONTROL page as well?<\/p>\n<h3>There are bugs<\/h3>\n<p>Well, all Software projects have bugs. But in this case it really sucks. Imagine spending an hour to get clocking right because the GUI is broken. Then finally hit compile and the code hangs during USB initialization. Looks like the DFLL vs. DPLL decision making does not work. Had to patch this by hand, now its good. But again, I need to redo this patch every time after project reconfiguration. Great.<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-271\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock-988x1024.jpg\" alt=\"\" width=\"660\" height=\"684\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock-988x1024.jpg 988w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock-289x300.jpg 289w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock-768x796.jpg 768w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/usb-wrong-clock.jpg 1013w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<h3>There is no central place for the code, and thus on issue tracker<\/h3>\n<p>So, I have spotted a few bugs. That happens all the time, no big deal. Usual workflow is to create a patch and do a pull request. But not with Atmel Start. There is just nothing one can do. Every other user has to find and fix that issue again and again.<\/p>\n<h3>Missing functionality<\/h3>\n<p>A few things that hit me on the first day<br \/>\n&#8211; NOR-Flash driver only talks QSPI, not &#8216;regular&#8217; SPI<br \/>\n&#8211; There is no CAN driver, only a example for a CAN cip attached via SPI. No use for a CPU with a buildin CAN<br \/>\n&#8211; The IP Stack has only LWIP 1.4, even though LWIP 2.x is stable. So no IPv6 support<\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-269\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi-1024x439.jpg\" alt=\"\" width=\"660\" height=\"283\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi-1024x439.jpg 1024w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi-300x129.jpg 300w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi-768x330.jpg 768w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/spi-nor-flash-only-qspi.jpg 1107w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/no-can-driver.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-268\" src=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/no-can-driver.jpg\" alt=\"\" width=\"716\" height=\"705\" srcset=\"https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/no-can-driver.jpg 716w, https:\/\/ca.rstenpresser.de\/wp-files\/2018\/10\/no-can-driver-300x295.jpg 300w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><\/a><\/p>\n<h3>I can&#8217;t go back to &#8216;regular&#8217; ASF<\/h3>\n<p>It looks like newer chips are only supported via START. So I can&#8217;t go back to the &#8216;just have some code and makefiles&#8217; approach of ASF. There is just no support in ASF for newer chips. Now I am stuck with this START shit.<\/p>\n<p>&nbsp;<\/p>\n<p>Unfortunately this is a work project, so I can&#8217;t choose to have a different CPU. And supporting it in libopencm3 is nothing my employer is willing to spend any resources on.<br \/>\nSo I am out of options and stuck with this shit. Even though there are some nice new features, like the generic-io-API for serial connections, &#8230; this does no make me happy.<br \/>\nDear Atmel\/Microchip: Please just put the libs on github and attach some Makefiles for ease of use. I promise to send patches \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently I had to work with Atmel START. The basic idea looks promising, a nice GUI to configure the peripherals of your chip so you can start with the actual project faster. But there are way to many downsides. It requires a Internet connection I don&#8217;t really understand the whole Idea behind the architecture. It &hellip; <a href=\"https:\/\/ca.rstenpresser.de\/blag\/2018\/10\/rant-why-atmel-start-sucks\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Rant: Why &#8220;Atmel START&#8221; sucks<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":267,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112],"tags":[113],"_links":{"self":[{"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/posts\/264"}],"collection":[{"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/comments?post=264"}],"version-history":[{"count":2,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/posts\/264\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/posts\/264\/revisions\/275"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/media\/267"}],"wp:attachment":[{"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/media?parent=264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/categories?post=264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ca.rstenpresser.de\/blag\/wp-json\/wp\/v2\/tags?post=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}